以下是自己的一个小心得
由于以前做多张图片上传到后台服务起的时候,自己前端的做法都是基本都是 使用 :1,将本地获取到的照片进行base64转换之后以某个符号分隔进行拼接传到后台。2,或者使用list<file> list 上传整个集合。
由于okhttp3 封装好的方法不支持直接上传数组对象 ,所以需要自己处理一下,
// 可以直接使用下面方法
private void postDataWithParame() {
OkHttpClient client = new OkHttpClient();
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
builder.addFormDataPart("token",token);//传递键值对参数
builder.addFormDataPart("a","create_discover");//传递键值对参数
builder.addFormDataPart("remarks","4545454");//传递键值对参数
for (int i = 0; i < defList.size(); i++) {
builder.addFormDataPart("thumb[]",null, RequestBody.create(MediaType.parse("image/jpeg; charset=utf-8"),Tools.imageToBase64(defList.get(i))));
}
Request request = new Request.Builder()//创建Request 对象。
.url(url)
.post(builder.build())//传递请求体
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d("AddAlbumActivity", response.body().string());
}
});
}
最需要注意的是这里
for (int i = 0; i < defList.size(); i++) { // 循环添加图片
builder.addFormDataPart("thumb[]",null, RequestBody.create(MediaType.parse("image/jpeg; charset=utf-8"),Tools.imageToBase64(defList.get(i))));
}
这里上传的是php服务器 thumb 为要上传的参数key 需要在后面加上[] 才能被识别是一个数组对象 ,之前没有加上这个符号的时候怎么传都只有一张图片 加上之后就会被成功解析数组所对应的值。
List<String> defList = new ArrayList<>();
defList .add("图片的资源路径");
defList .add("图片的资源路径");