最近有使用一个文件上传的功能,需要在请求中添加文件,一起传给服务器
Okhttp提供了这个文件添加然后上传的功能
下面给出核心的代码,然后分析一下
//多个文件上传,Filelist private static Request getFilesRequest(String url, List<File> files, Map<String, String> maps){ MultipartBody.Builder builder= new MultipartBody.Builder().setType(MultipartBody.FORM); if(maps==null){ for(int i = 0;i < files.size();i++){ builder.addPart( Headers.of("Content-Disposition", "form-data; name="file";filename="file.jpg""), RequestBody.create(MediaType.parse("image/png"),files.get(i)) ).build(); } }else{ for (String key : maps.keySet()) { String str = maps.get(key); builder.addFormDataPart(key,str ); } for(int j = 0;j < files.size();j++){ long fileSize = files.get(j).length(); builder.addPart( Headers.of("Content-Disposition", "form-data; name="file";filename="file.jpg";filesize="+fileSize), RequestBody.create(MediaType.parse("image/png"),files.get(j)) ); } } RequestBody body=builder.build(); return new Request.Builder().url(url).post(body).build(); }
先说三个参数吧
三个参数第一个是请求的URL
第二个是Multipart的文件list
第三个是headermap,就是请求的请求头params
首先通过Multipart的Builder模式实例化一个builder
其次如果Header的map为空则直接将file加入到part中
否则依次将headermap 和 file的list中的数据加入到Request中
完成后builder build 出来的MultipartBody 请求赋值给 RequestBody(Multipartbody继承了Requestbody)
之后将Request构建完成即可
Call call =mOkhttpClient.newCall(request);
然后就是用Okhttp 进行请求,请求方法略过