最近有使用一個文件上傳的功能,須要在請求中添加文件,一塊兒傳給服務器服務器
Okhttp提供了這個文件添加而後上傳的功能post
下面給出核心的代碼,而後分析一下ui
//多個文件上傳,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
三個參數第一個是請求的URLspa
第二個是Multipart的文件listcode
第三個是headermap,就是請求的請求頭paramsorm
首先經過Multipart的Builder模式實例化一個builderblog
其次若是Header的map爲空則直接將file加入到part中繼承
不然依次將headermap 和 file的list中的數據加入到Request中ip
完成後builder build 出來的MultipartBody 請求賦值給 RequestBody(Multipartbody繼承了Requestbody)
以後將Request構建完成便可
Call call =mOkhttpClient.newCall(request);
而後就是用Okhttp 進行請求,請求方法略過