最近项目中用到了多文件上传,其实就是仿照微信朋友圈一样的发送动态的效果。之前上传图片用的是Xutils的框架,
上传一张没有任何问题。而这一次是需要上传多张的,我写了一个for循环,将图片累计拼入参数,这样就需要后台一张一张的
接收。可当时的后台也是用的框架,是以File[]的形式接收的。然后我就找各种能封装File[]的参数,然而并没有找到。
折腾了好久,换了很多种方式,都没有成功。最后无意间看到了表单形式的上传,这次才是找到了正主,
在OKHttp这个框架中支持多文件上传,下面直接贴出核心代码:
MultipartBody.Builder multipartBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
multipartBody.addFormDataPart("method","postDynamic");
multipartBody.addFormDataPart("uid",RequestUtils.getUid(getActivity())+"");
multipartBody.addFormDataPart("token","1");
multipartBody.addFormDataPart("words",dongtai_words.getText().toString());
for(int i= 0;i<Bimp.tempSelectBitmap.size();i++){
multipartBody.addFormDataPart("dynamicPictures","image"+i+".jpg",
RequestBody.create(UploadUtils.MEDIA_TYPE_PNG,new File(Bimp.tempSelectBitmap.get(i).getImagePath())));
}
uploadUtils.sendMultipart(multipartBody,getActivity());
upLoadUtils的代码是:
public void sendMultipart(MultipartBody.Builder multipartBody, final Context context){
OkHttpClient okHttpClient = new OkHttpClient();
//构建请求体
RequestBody requestBody = multipartBody.build();
//构建请求
Request request = new Request.Builder()
.url(MyConfig.uploadUrl)//地址
.post(requestBody)//添加请求体
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//这里是成功的回掉,由于我是把回掉接口抽出来了,所以在这里又写了一个接口,
供activity实现。这里可以根据自己的需求写
successListener.onSuccess();
}
});
}
别吃惊,就是这么简单。代码也不多做揭示了,一看就明白了。在这里和大家分享一下,以后不会在因此走弯路了。
以前只是听说过这个框架,从来没有用过,今天因为多文件上传找到了这里,就大致浏览了一下,发现这个框架还是
蛮好用的,有时间可以深入研究一下。
在这里说明一下,这个文件上传是万能的,不管是多问价还是单文件,不管是图片还是文本,这一个就可以搞定。
以后不会再用xutils的框架写上传了,那个太局限了。
万能的多文件上传例子
最新推荐文章于 2024-04-20 10:33:20 发布