OkHttp 上传文件, 支持单个, 多个文件上传
// okhttp3 的版本信息如下
// implementation com.squareup.okhttp3:okhttp:3.6.0
// implementation com.squareup.okhttp3:okhttp-urlconnection:3.6.0
/**
* 上传文件(支持单个, 多个文件上传)
*/
public void upLoadingFile(String userId,
String businessId,
String type,
String meetInfoId,
String filePath) {
mLog.d("url ------>> " + mRequestUrl);
// 1.RequestBody
//创建MultipartBody.Builder,用于添加请求的数据
MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
File file = new File(filePath); //生成文件
// 根据文件的后缀名,获得文件类型
String fileType = getMimeType(file.getName());
//给Builder添加上传的文件
multipartBodyBuilder.addFormDataPart(
"image", //请求的名字
file.getName(), //文件的文字,服务器端用来解析的
RequestBody.create(MediaType.parse(fileType), file) //创建RequestBody,把上传的文件放入
);
// 添加其他参数信息, 如果只是单纯的上传文件, 下面的添加其他参数的方法不用调用
multipartBodyBuilder.addFormDataPart("userId", userId);
multipartBodyBuilder.addFormDataPart("businessId", businessId);
multipartBodyBuilder.addFormDataPart("type", type);
multipartBodyBuilder.addFormDataPart("meetInfoId", meetInfoId);
RequestBody requestBody = multipartBodyBuilder.build();//根据Builder创建请求
mLog.d("params ------>> " + multipartBodyBuilder.toString());
mLog.d("params ------>> " + requestBody.toString());
// 2.requestBuilder
Request.Builder requestBuilder = new Request.Builder();
requestBuilder.url(mRequestUrl).post(requestBody);
Request requestBuilderRequest = requestBuilder.build();
// 3.OkHttpClient
OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(createSSLSocketFactory())//创建一个证书对象
.hostnameVerifier(new TrustAllHostnameVerifier())//校验名称,这个对象就是信任所有的主机,也就是信任所有https的请求
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.build();
Call call = mOkHttpClient.newCall(requestBuilderRequest);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//请求失败监听: 异步请求(非主线程)
mLog.d("error ------>> " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) {
mLog.d("onResponse ------>> ");
}
});
}
/**
* 获取文件MimeType
*
* @param filename
* @return
*/
private static String getMimeType(String fileName) {
FileNameMap filenameMap = URLConnection.getFileNameMap();
String contentType = filenameMap.getContentTypeFor(fileName);
if (contentType == null) {
contentType = "application/octet-stream"; //* exe,所有的可执行程序
}
return contentType;
}