使用SpringMVC+mongodb做文件的上传和下载,下载的文件除TXT(乱码)外均无法打开。
1.怀疑是springmvcmessageconverter配置的问题,尝试配置了byteArrayConverter
2.怀疑是上传存储到mongodb时文件损坏
下载和上传的代码如下,求大佬帮忙检查一下问题出在哪
下载部分:使用ResponseEntity对象返回,尝试配置了springmvc的ByteArrayConverter
配置文件:
image/jpeg
image/png
application/pdf
image/gif
application/octet-stream
text/plain
rest:
/**
*下载文件请求
*
*@paramfileId文件ID
*@return文件流
*/
@CrossOrigin
@RequestMapping(value="/download/{fileId}",method=RequestMethod.GET)
@ResponseBody
publicResponseEntityfileDownload(@PathVariableStringfileId)throwsException{
//从MongoDB获取文件
GridFSDBFilefile=fileService.getFileById(fileId);
StringfileType=file.getContentType();
//设置文件ContentType
MediaTypemediaType=FileUtil.getEnableStr(fileType);
//获取文件字节流
byte[]outByte=FileUtil.gridFSBFileToByte(file);
HttpHeadersheaders=newHttpHeaders();
headers.setContentType(mediaType);
headers.setContentDispositionFormData("attachment",file.getFilename()+"."+fileType);
//返回前端
returnnewResponseEntity(outByte,headers,HttpStatus.OK);
}
service:
@Override
publicGridFSDBFilegetFileById(StringfileId)throwsRestServiceException{
GridFSDBFilefile=
gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));
if(file==null){
thrownewRestServiceException("找不到相关文件!请检查fileId");
}
returnfile;
}
上传部分:
rest:
/**
*接受前端上传的文件并存储至MongoDB
*
*@paramfile前端上传的文件
*@return处理结果信息
*/
@CrossOrigin
@ResponseBody
@RequestMapping(value="/upload",method=RequestMethod.POST)
publicReturnInfofileUpload(@RequestParamMultipartFilefile)throwsException{
ReturnInfoinfo=newReturnInfo();
if(!file.isEmpty()){
BufferedInputStreaminputStream=newBufferedInputStream(file.getInputStream());
StringfileId=fileService.fileUpload(inputStream);
info.setCode(ReturnInfo.OK);
info.setMessage("上传成功!");
MapresultMap=newHashMap();
resultMap.put("fileId",fileId);
info.setData(resultMap);
returninfo;
}else{
info.setMessage("文件不能为空");
info.setCode(ReturnInfo.ERROR);
returninfo;
}
}
service:
/**
*文件上传
*
*@paramfileInput文件输入流
*@returnmongodb对应文件id
*/
@Override
publicStringfileUpload(InputStreamfileInput)throwsRestServiceException{
StringfileType=FileUtil.getFileType(fileInput);
System.out.println(fileType);
//文件类型判断
if(!FileUtil.ENABLE_TYPES.contains(fileType)){
thrownewRestServiceException("不支持的文件类型!");
}
GridFSFileuploadFile=gridFsTemplate.store(fileInput,StringUtil.getUUID(),fileType);
returnuploadFile.getId().toString();
}
分 -->
|