AI大模型教程
一起来学习

MongoDB 使用GridFS 上传文件 ,代码成品奉献

背景:

 单独创建自定义桶用于文件上传,代码已经上传附件。

处理问题:

正常mogo上传只能小于16M,

本文使用的mongo版本

mongodb-driver-core:3.8.2

mongodb-driver:3.8.2

spring-boot-starter-data-mongodb:2.1.10.RELEASE

spring-data-mongodb:2.1.12.RELEASE 

1. MongoDB “px” Bucket 配置方法

在给定的代码中,使用 Spring Data MongoDB 来配置 “px” bucket 而不使用默认的 “mongo” bucket。以下是详细的配置步骤和代码分析:

配置类 PxMongoGridFsConfig


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;

@Configuration
public class PxMongoGridFsConfig {

    /**
     * 手动创建 MappingMongoConverter Bean。
     * 在一些项目中,Spring Boot 可能不会自动配置此 Bean,因此需要我们手动创建。
     * @param mongoDbFactory Spring Boot 自动配置的 MongoDbFactory
     * @param context Spring Boot 自动配置的 MongoMappingContext
     * @return 配置好的 MappingMongoConverter
     */
    @Bean
    public MappingMongoConverter mappingMongoConverter(MongoDbFactory mongoDbFactory, MongoMappingContext context) {
        MappingMongoConverter converter = new MappingMongoConverter(new org.springframework.data.mongodb.core.convert.DefaultDbRefResolver(mongoDbFactory), context);
        // 移除 _class 字段
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        return converter;
    }

    // 这是为 "px" bucket 创建的 GridFsTemplate
    @Bean(name = "pxGridFsTemplate")
    public GridFsTemplate pxGridFsTemplate(MongoDbFactory mongoDbFactory, MappingMongoConverter mongoConverter) {
        return new GridFsTemplate(mongoDbFactory, mongoConverter, "px");
    }
}

 上传文件时候会自动创建桶:

这个是px.files上传的文件

前端页面:


                            
预览删除

js方法:

  // 上传图片前的验证
        beforeUpload(file) {
            const isImage = file.type.indexOf('image/') === 0;
            const isLt4M = file.size / 1024 / 1024  {
                console.log(this.registrationForm.fileId.value)
                this.$http.post('/business/pxMongoGridFS/file/delete', {
                    fileId: this.registrationForm.fileId.value
                }).then(res => {
                    if (res.data.code === 0) {
                        this.registrationForm.fileId.value = '';
                        this.$message.success('删除成功');
                    } else {
                        this.$message.error(res.data.msg || '删除失败');
                    }
                }).catch(err => {
                    this.$message.error('删除失败:' + err.message);
                });
            }).catch(() => {
                // 取消删除
            });
        }

二、上传、下载、删除接口

根据上面controller找到service代码复制就能用,代码已经上传附件,自行下载

 /**
     * 上传文件
     */
    @PostMapping("/upload")
    public ResponseMessage upload(@RequestParam("file") MultipartFile file,
                                @OdinRequestParam("businessId") String businessId,
                                @OdinRequestParam("businessType") String businessType,
                                @OdinRequestParam("description") String description) {
        try {
            if (file == null || file.isEmpty()) {
                return this.error("上传文件不能为空");
            }


            // 上传文件
            String fileId = fileService.uploadFile(file, businessId, businessType, description);

            return ResponseMessage.ok("上传成功", fileId);
        } catch (Exception e) {
            log.error("上传文件异常", e);
            return this.error("上传文件异常:" + e.getMessage());
        }
    }

    /**
     * 下载文件
     */
    @GetMapping("/download/{fileId}")
    @Syslog("下载文件")
    public void download(@PathVariable("fileId") String fileId, HttpServletResponse response) {
        try {
            fileService.downloadFile(fileId, response);
        } catch (Exception e) {
            log.error("下载文件异常", e);
            try {
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("下载文件异常:" + e.getMessage());
            } catch (Exception ex) {
                log.error("响应异常信息失败", ex);
            }
        }
    }

    /**
     * 删除文件
     */
    @PostMapping("/delete")
    public ResponseMessage delete(@OdinRequestParam("fileId") String fileId) {
        try {
            boolean result = fileService.deleteFile(fileId);
            if (result) {
                return this.ok("删除成功");
            } else {
                return this.error("删除失败");
            }
        } catch (Exception e) {
            log.error("删除文件异常", e);
            return this.error("删除文件异常:" + e.getMessage());
        }
    }

文章来源于互联网:MongoDB 使用GridFS 上传文件 ,代码成品奉献

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » MongoDB 使用GridFS 上传文件 ,代码成品奉献
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们