圖片 壓縮 上傳mongodb和下載
阿新 • • 發佈:2018-12-19
// 獲得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) { } }