android开发中上传图片到服务端是再常见不过的功能。直奔主题:项目中用okhttp实现图片+文字参数上传。
我使用的okhttp版本:
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
实现代码:
//初始化OkHttpClient
OkHttpClient client = new OkHttpClient();
// form 表单形式上传
MultipartBody.Builder requestBody = new MultipartBody.Builder();
requestBody.setType(MultipartBody.FORM);
//pathList是文件路径对应的列表
if (null != pathList && pathList.size() > 0) {
for (String path : pathList) {
File file = new File(path);
if (file != null) {
// MediaType.parse() 里面是上传的文件类型。
RequestBody body = RequestBody.create(MediaType.parse("image/*"), file);
// 参数分别为, 请求key ,文件名称 , RequestBody
requestBody.addFormDataPart("images", file.getName(), body);
}
}
}
//要上传的文字参数
Map<String, String> map = new HashMap<>();
map.put("param1", "param1" );
map.put("param2","param1");
if (map != null) {
for (String key : map.keySet()) {
requestBody.addFormDataPart(key, map.get(key));
}
}
//创建Request对象
Request request = new Request.Builder().url(Constant.HTTP_URL)
.addHeader("Content-Type", "application/json;charset=UTF-8")//添加header
.addHeader("token", "xxxxx").build();
// readTimeout("请求超时时间" , 时间单位);
client.newBuilder().readTimeout(5000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//请求失败处理
mHandler.sendEmptyMessage(Constant.RESPONSE_FAIL);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
mHandler.sendEmptyMessage(Constant.RESPONSE_SUCCESS);
} else {
mHandler.sendEmptyMessage(Constant.RESPONSE_FAIL);
}
}
});
mHandler就是Android开发最熟悉的Handler了,就不在这帖代码了。