日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...

發布時間:2023/12/4 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前上傳圖片都是直接將圖片轉化為io流傳給服務器,沒有用框架傳圖片。

最近做項目,打算換個方法上傳圖片。

Android發展到現在,Okhttp顯得越來越重要,所以,這次我選擇用Okhttp上傳圖片。

Okhttp目前已經更新到Okhttp3版本了,用法跟之前相比,也有一些差別。在網上找了很多資料,

并和java后臺同事反復調試,終于成功上傳多張圖片,同時傳遞一些鍵值對參數。

以下是我對該過程的封裝:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

/**

* 上傳多張圖片及參數

* @param reqUrl URL地址

* @param params 參數

* @param pic_key 上傳圖片的關鍵字

* @param paths 圖片路徑

*/

public Observable sendMultipart(String reqUrl,Map params,String pic_key, List files){

return Observable.create(new Observable.OnSubscribe(){

@Override

public void call(Subscriber super String> subscriber) {

MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();

multipartBodyBuilder.setType(MultipartBody.FORM);

//遍歷map中所有參數到builder

if (params != null){

for (String key : params.keySet()) {

multipartBodyBuilder.addFormDataPart(key, params.get(key));

}

}

//遍歷paths中所有圖片絕對路徑到builder,并約定key如“upload”作為后臺接受多張圖片的key

if (files != null){

for (File file : files) {

multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));

}

}

//構建請求體

RequestBody requestBody = multipartBodyBuilder.build();

Request.Builder RequestBuilder = new Request.Builder();

RequestBuilder.url(reqUrl);// 添加URL地址

RequestBuilder.post(requestBody);

Request request = RequestBuilder.build();

mOkHttpClient.newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

subscriber.onError(e);

subscriber.onCompleted();

call.cancel();

}

@Override

public void onResponse(Call call, Response response) throws IOException {

String str = response.body().string();

subscriber.onNext(str);

subscriber.onCompleted();

call.cancel();

}

});

}

});

}

在UI界面的調用:

OkHttp3Utils.getInstance().sendMultipart(Constants.URL.URL_ADD_NOTICE, mMap, "appendix", mImageList)

.observeOn(AndroidSchedulers.mainThread())

.subscribeOn(Schedulers.newThread())

.subscribe(new Subscriber() {

@Override

public void onCompleted() {

}

@Override

public void onError(Throwable throwable) {

LogUtil.i(TAG, "throwable:" + throwable.toString());

}

@Override

public void onNext(String s) {

LogUtil.i(TAG, "s:" + s);

}

});

調試過程中,有一次將?multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));寫成了 multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file));導致后臺無法用常規方法獲取圖片(雖然斷點調試時也能看到圖片數據),這點需要注意。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持前端開發者。

總結

以上是生活随笔為你收集整理的okhttp上传图片和其他参数_Android中Okhttp3实现上传多张图片同时传递参数_放手_前端开发者...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。