前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GridFs文件上传下载

GridFs文件上传下载

作者头像
用户10325771
发布2023-03-01 18:09:51
4950
发布2023-03-01 18:09:51
举报

文章目录[隐藏]

业务层

代码语言:javascript
复制
public class FileMonService {

    /**
     * 操作GridFs接口
     */
    private final GridFsTemplate gridFsTemplate;

    @Autowired
    public FileMonService(GridFsTemplate gridFsTemplate) {
        this.gridFsTemplate = gridFsTemplate;
    }


    public ObjectId gridFsFile(MultipartFile file)throws FileUploadException {
        try {
            ObjectId objectId = gridFsTemplate.store(file.getInputStream(),file.getOriginalFilename(), file.getContentType());
            log.info("object-id:[{}]",objectId);
            return objectId;
        } catch (IOException e) {
            throw new FileUploadException("文件上传错误!");
        }
    }

    public GridFSFile gridFsDownload(String fileId) {
        return StringUtils.isNotBlank(fileId)?gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId))):null;
    }


    public void deleteFile(String fileId) {
        gridFsTemplate.delete(Query.query(Criteria.where("_id").is(fileId)));
    }

}

上传

代码语言:javascript
复制
    @ApiOperation(value = "单文件上传")
    @RequestMapping(value = "/upload", method = RequestMethod.POST,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public DataJsonResult gridFsFile(@RequestPart("file") MultipartFile file){
        try {
            return new DataJsonResult<>(true,fileMonService.gridFsFile(file).toString());
        }catch (FileUploadException e){
            return new DataJsonResult<>(new JsonResult(false,e.getMessage()));
        }
    }

下载

代码语言:javascript
复制
    @ApiOperation(value = "单文件下载")
    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public DataJsonResult gridFsDownload(@RequestParam("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) {
        //查询单个文件
        GridFSFile gfsFile = fileMonService.gridFsDownload(fileId);

        if (gfsFile == null) {
            return new DataJsonResult<>( false, "文件可能不存在,请重试");
        }
        GridFsResource gridFsResource = new GridFsResource(gfsFile, GridFSBuckets.create(mongoDbFactory.getDb()).openDownloadStream(gfsFile.getObjectId()));
        String fileName = gfsFile.getFilename().replace(",", "");
        //处理文件名乱码
        try {
            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(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
            }
            //通知浏览器进行文件下载
            response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
            IOUtils.copy(gridFsResource.getInputStream(), response.getOutputStream());
            return new DataJsonResult<>(true,"文件下载成功");
        } catch (IOException e) {
            return new DataJsonResult<>(new JsonResult(false,"文件下载失败"));
        }
    }

预览

代码语言:javascript
复制
@ApiOperation(value = "单文件预览-文件id")
    @RequestMapping(value = "/preview", method = RequestMethod.GET)
    public R gridFsPreview(@RequestParam("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) {
        //查询单个文件
        GridFSFile gfsFile = fileMonService.gridFsDownload(fileId);
        if (gfsFile == null) {
            return failed("文件可能不存在,请重试");
        }
        GridFsResource gridFsResource = new GridFsResource(gfsFile, GridFSBuckets.create(mongoDbFactory.getDb()).openDownloadStream(gfsFile.getObjectId()));
        String fileName = gfsFile.getFilename().replace(",", "");
        //处理文件名乱码
        try {
            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(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
            }
            //通知浏览器进行文件预览
            response.setContentType("image/svg+xml;charset=UTF-8");
            response.addHeader("Accept-Ranges","bytes");
            IOUtils.copy(gridFsResource.getInputStream(), response.getOutputStream());
            return null;
        } catch (IOException e) {
            return failed("文件下载失败");
        }
    }

配置文件

代码语言:javascript
复制
spring.data.mongodb.uri=mongodb://testuser:123456@10.10.10.10:27017/gridfs
spring.data.mongodb.database=gridfs
spring.data.mongodb.authentication-database=admin
#允许上传最大的文件大小
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-28),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 业务层
  • 上传
  • 下载
  • 预览
  • 配置文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档