背景
业务需要在转发app上传图片的form表单到通用能力的图片服务器
实现
这里采用okhttp实现,具体代码如下,直接将图片转换成字节来进行处理,以避免需要保存图片到本地再进行上传
public static String post(String url, Map<String, Object> paramMap, boolean printLog) throws Exception{
MultipartBody.Builder builder = new MultipartBody.Builder();
StringBuilder sb = new StringBuilder(url+"?");
if (MapUtils.isNotEmpty(paramMap)){
paramMap.forEach((k,v)->{
if (v instanceof MultipartFile){
try {
builder.addFormDataPart(k ,
((MultipartFile) v).getOriginalFilename(),
RequestBody.create(MediaType.parse("multipart/form-data"),((MultipartFile) v).getBytes()
));
} catch (IOException e) {
e.printStackTrace();
}
}else {
sb.append ("&" + k + "=" + v);
}
});
}
MultipartBody body = builder.build();
Request request = new Request.Builder()
.url(sb.toString())
.post(body)
.build();
long start = System.currentTimeMillis();
Response response = client.newCall(request).execute();
long cost = System.currentTimeMillis() - start;
String res = response.body().string();
if (printLog || cost > HTTP_COST_LOG) {
if (body != null) {
log.info("url={},param={},接口耗时:{}ms,{}", url, paramMap.toString() , cost, res);
} else {
log.info("url={},param=null,接口耗时:{}ms,{}", url, cost, res);
}
}
return res;
}