天天看點

android上傳圖檔攜帶參數,Android OkHttp Post上傳檔案并且攜帶參數執行個體詳解

Android OkHttp Post上傳檔案并且攜帶參數

這裡整理一下 OkHttp 的 post 在上傳檔案的同時,也要攜帶請求參數的方法。

使用 OkHttp 版本如下:

compile 'com.squareup.okhttp3:okhttp:3.4.1'

代碼如下:

protected void post_file(final String url, final Map map, File file) {

OkHttpClient client = new OkHttpClient();

// form 表單形式上傳

MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);

if(file != null){

// MediaType.parse() 裡面是上傳的檔案類型。

RequestBody body = RequestBody.create(MediaType.parse("image/*"), file);

String filename = file.getName();

// 參數分别為, 請求key ,檔案名稱 , RequestBody

requestBody.addFormDataPart("headImage", file.getName(), body);

}

if (map != null) {

// map 裡面是請求中所需要的 key 和 value

for (Map.Entry entry : map.entrySet()) {

requestBody.addFormDataPart(valueOf(entry.getKey()), valueOf(entry.getValue()));

}

}

Request request = new Request.Builder().url("請求位址").post(requestBody.build()).tag(context).build();

// readTimeout("請求逾時時間" , 時間機關);

client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() {

@Override

public void onFailure(Call call, IOException e) {

Log.i("lfq" ,"onFailure");

}

@Override

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

if (response.isSuccessful()) {

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

Log.i("lfq", response.message() + " , body " + str);

} else {

Log.i("lfq" ,response.message() + " error : body " + response.body().string());

}

}

});

}

這裡說明一點,就是 MultipartBody.Builder 的 addFormDataPart 方法,是對于之前的 addPart 方法做了一個封裝,是以,不需要再去配置 Header 之類的。

如果隻是單純的 Post 攜帶參數,那麼直接使用 FormBody ,代碼如下:

FormBody.Builder formBody = new FormBody.Builder();

if (map != null) {

for (Map.Entry entry : map.entrySet()) {

formBody.add(String.valueOf(entry.getKey()),String.valueOf(entry.getValue()));

}

}

以上隻是針對項目中遇到的問題進行整理,需要了解更多,請自行查閱大神們的解析。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支援!