前台上传文件或者后台生成文件直接上传到MongoDB数据库,然后根据MongoDB的_id下载文件
引入依赖
1 2 3 4 5
| <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.2.1.RELEASE</version> </dependency>
|
GridFS对象
1 2
| @Autowired private GridFsTemplate gridFsTemplate;
|
文件上传
1 2 3 4 5 6 7 8 9 10 11
| public String uploadFile(MultipartFile file) throws Exception { String fileName = file.getOriginalFilename(); InputStream ins = file.getInputStream(); String contentType = file.getContentType(); ObjectId gridFSFile = gridFsTemplate.store(ins, fileName, contentType); return gridFSFile.toString(); }
|
文件下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public void downloadFile(@RequestParam(name = "file_id") String fileId, HttpServletRequest request, HttpServletResponse response) throws Exception { Query query = Query.query(Criteria.where("_id").is(fileId)); GridFsFile gfsFile = gridFsTemplate.findOne(query); GridFsResource gridFsResource=new GridFsResource(gfsFile, GridFsBuckets.create(mongoDbFactory.getDb)).openDownloadStream(gfsFile.getObjectId())); 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 { fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1"); } response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\""); IOUtils.copy(gridFsResource.getInputStream(),response.getOutputStream()); }
|
删除文件
1 2 3 4 5 6 7 8 9 10
| public Object deleteFile(@RequestParam(name = "file_id") String fileId) { Query query = Query.query(Criteria.where("_id").is(fileId)); GridFSDBFile gfsfile = gridFsTemplate.findOne(query); if (gfsfile == null) { return ServiceResultHelper.genResultWithFaild(Constant.ErrorCode.FILE_NOT_EXIST_ERROR_MSG, Constant.ErrorCode.FILE_NOT_EXIST_ERROR); } gridFsTemplate.delete(query); return ServiceResultHelper.genResultWithSuccess(); }
|