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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

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

之前上傳圖片都是直接將圖片轉(zhuǎn)化為io流傳給服務(wù)器,沒有用框架傳圖片。

最近做項(xiàng)目,打算換個(gè)方法上傳圖片。

Android發(fā)展到現(xiàn)在,Okhttp顯得越來越重要,所以,這次我選擇用Okhttp上傳圖片。

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

并和java后臺(tái)同事反復(fù)調(diào)試,終于成功上傳多張圖片,同時(shí)傳遞一些鍵值對(duì)參數(shù)。

以下是我對(duì)該過程的封裝:

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

/**

* 上傳多張圖片及參數(shù)

* @param reqUrl URL地址

* @param params 參數(shù)

* @param pic_key 上傳圖片的關(guān)鍵字

* @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中所有參數(shù)到builder

if (params != null){

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

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

}

}

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

if (files != null){

for (File file : files) {

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

}

}

//構(gòu)建請(qǐng)求體

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界面的調(diào)用:

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);

}

});

調(diào)試過程中,有一次將?multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));寫成了 multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file));導(dǎo)致后臺(tái)無法用常規(guī)方法獲取圖片(雖然斷點(diǎn)調(diào)試時(shí)也能看到圖片數(shù)據(jù)),這點(diǎn)需要注意。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持前端開發(fā)者。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。