之前写过一篇(一),代码过于复杂,这次用新的方式实现同样的功能。
Android端主要通过OkHttp3实现上传
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
private final OkHttpClient client = new OkHttpClient();
public String upload(String imageType,String userPhone,File file) throws NetworkException{
RequestBody fileBody = RequestBody.create(MediaType.parse("image/png"), file);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "head_image", fileBody)
.addFormDataPart("name", "name")
.addFormDataPart("email", "email")
.build();
Request request = new Request.Builder()
.url("http://xxxxx")
.post(requestBody)
.build();
Response response;
try {
response = client.newCall(request).execute();
String json = response.body().string();
System.out.println(json);
if (response.isSuccessful()) {
System.out.println("上传成功");
} else {
System.out.println("上传失败");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
服务器端代码:
/**
* 移动端上传数据和图片
* @param request
* @return
*/
@PostMapping(value = "upload")
@ResponseBody
public String mobileUpload(HttpServletRequest request){
JSONObject jsonObject = new JSONObject();
//创建一个通用的多部分解析器
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
Upload upload = new Upload();
try{
String name = request.getParameter("name");
String email = request.getParameter("email");
logger.info(name);
logger.info(email);
}catch (Exception e){
e.printStackTrace();
return jsonObject.toString();
}
try{
//上传图片部分
// List<String> imgs = new ArrayList<String>();
if(multipartResolver.isMultipart(request)) {
//转换成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multiRequest.getFileMap();
Iterator<String> fileNameIterator = fileMap.keySet().iterator();
//上传路径
File filedir = new File(UploadFileUtil.MOBILE_IMAGE_DIR);
if (!filedir.exists() && !filedir.isDirectory()){
filedir.mkdirs();
}
//获取到图片且必须一张
if (fileNameIterator.hasNext()) {
MultipartFile file = fileMap.get(fileNameIterator.next());
if (file.isEmpty() || file.getSize() == 0) {
}
String [] strings = file.getContentType().split("/");
String type = strings[1];
logger.info("图片类型:" + type);
//重命名上传后的文件名
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String fileName = sdf.format(date) + "." + type;
logger.info("文件名称为:"+fileName);
//定义上传路径
File localFile = new File(UploadFileUtil.MOBILE_IMAGE_DIR + fileName);
file.transferTo(localFile);
System.out.println("上传路径为:" +localFile.getPath());
//设置图片路径
upload.setUploadResourceURL(localFile.getPath());
} else {
//没有上传图片的话,则抛出异常
throw new Exception("未上传图片");
}
}
} catch (Exception e){
jsonObject.put("result",false);
jsonObject.put("msg",e.getMessage());
return jsonObject.toString();
}
jsonObject.put("result",true);
jsonObject.put("msg","success");
return jsonObject.toString();
}