// 获得SpringBoot提供的mongodb的GridFS对象 @Autowired private GridFsTemplate gridFsTemplate;
public ServiceResult<FileInfoAO> compressUploadFile(HttpServletRequest request) { try { Part part = request.getPart("file"); // 获得提交的文件名 String fileName = part.getSubmittedFileName(); // 获得文件类型 String contentType = part.getContentType(); // 获得文件输入流 InputStream ins = part.getInputStream(); BufferedImage image = Thumbnails.of(ins).scale(1f).outputQuality(0.25f).asBufferedImage(); ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", os); InputStream is = new ByteArrayInputStream(os.toByteArray()); // 将文件存储到mongodb中,mongodb 将会返回这个文件的具体信息 GridFSFile gridFSFile = gridFsTemplate.store(is, fileName, contentType); FileInfoAO fileInfo = new FileInfoAO(); fileInfo.setContentType(contentType); fileInfo.setFileName(fileName); fileInfo.setMongoFileId(gridFSFile.getId().toString()); return ServiceResultHelper.genResultWithSuccess(fileInfo); } catch (Exception e) { return ServiceResultHelper.genResultWithFaild("图片上传失败", -1); } }
Thumbnails 依赖包
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
返回结果取mongoFileId 然后下载
{
"succeed": true,
"code": 200,
"subCode": 200,
"msg": "成功",
"data": {
"contentType": "image/jpeg",
"fileName": "2.jpg",
"mongoFileId": "5bdfb9807f76271da8bac485",
"lastUpdateBy": "25540194153267202"
},
"additionalProperties": {}
}
/** * 下载文件 * * @param fileId 文件id * @param request * @param response */ @Override public void downloadFile(String fileId, HttpServletRequest request, HttpServletResponse response) { Query query = Query.query(Criteria.where("_id").is(fileId)); // 查询单个文件 GridFSDBFile gfsfile = gridFsTemplate.findOne(query); try { if (gfsfile == null) { return; } String fileName = gfsfile.getFilename().replace(",", ""); //处理中文文件名乱码 if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") || request.getHeader("User-Agent").toUpperCase().contains("TRIDENT") || request.getHeader("User-Agent").toUpperCase().contains("EDGE")) { fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); } else { //非IE浏览器的处理: fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1"); } // 通知浏览器进行文件下载 response.setContentType(gfsfile.getContentType()); response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); gfsfile.writeTo(response.getOutputStream()); } catch (IOException e) { } }