java收octet-stream后转multipart⽅案
解决了⼀个前端传过来是⼆进制流,但后端⽤multipartfile收不到的问题。
因为octet-stream⼆进制流收到的是乱码,所以需要⽤inputstream⾃⼰转⼀层。
且⼆进制流不能区分多个参数,只能穿⼀个⽂件(变成⼆进制)过来。
@RequestMapping(value ="/image/uploadV2", method = RequestMethod.POST)
@ResponseBody
public Response uploadPddImageV2(FileUploadDto fileUploadDto, HttpServletRequest request)throws Exception { ContentType().contains("multipart/form-data")){
// 安卓端⾛这个
return uploadPddImage(fileUploadDto, request);
}
// ios端⾛这个 - application/octet-stream
// 这边都是打印请求参数
Enumeration enumeration = HeaderNames();
while((enumeration.hasMoreElements())){
String name =(String) Element();
logger.biz("[uploadPddImageV2] headers : "+ name +" : "+ Header(name));
}
Enumeration enumeration1 = ParameterNames();
while(enumeration1.hasMoreElements()){
String name =(String) Element();
logger.biz("[uploadPddImageV2] params : "+ name +" : "+ Parameter(name)));
}
// 这个是前端通过hearder传过来的⽂件类型:jpeg,jpg,png
String imgType = Header("img-type");
// ⽂件格式校验
if("jpeg".equals(imgType)||"jpg".equals(imgType)){
imgType = MediaType.IMAGE_JPEG_VALUE;
}else if("png".equals(imgType)){
imgType = MediaType.IMAGE_PNG_VALUE;
}else{
throw new Exception("⽂件格式错误");
}
// ⽣成本地临时⽂件的保存路径
String filePath ="/usr/local/tomcat/"+ System.currentTimeMillis()+"."+ imgType;
Path dest = (filePath);
try{
// 转成对应的⽂件
}catch(Exception e){
<("[uploadPddImageV2] 转换⽂件失败...", e);
}
// 把转成的file⽂件转成multiPartFile,然后再调⽤原先的⽅法。⽤完记得删除本地临时⽂件
File localFile =new File(filePath);
if(localFile !=null){
fileUploadDto =new FileUploadDto();
fileUploadDto.setFile(getMultipartFile(localFile, imgType));
fileUploadDto.setImageType(1);
String path = imageService.uploadImage(fileUploadDto,getSessionUser());
// ⽤完以后删除⽂件
localFile.delete();
java streamreturn response(ImmutableMap.of("picUrl", path));
}
return new Response();
}
// 这是⼀个file转multiPartFile的⽅法,imgType为前端传过来,然后⽤MediaType获取到的⽂件类型public static MultipartFile getMultipartFile(File file, String imgType){
FileItem item =new DiskFileItemFactory().createItem("file"
, imgType
,true
, Name());
try(InputStream input =new FileInputStream(file);
OutputStream os = OutputStream()){
// 流转移
}catch(Exception e){
throw new IllegalArgumentException("Invalid file: "+ e, e);
}
return new CommonsMultipartFile(item);
}
```
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论