最近有使用一個文件上傳的功能,需要在請求中添加文件,一起傳給服務器
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 進行請求,請求方法略過