(二)SpringBoot中上传文件到MOngoDB

・这里记录并分享两种存储方式,具体使用那种可以根据业务和所存文件大小来选择*
・当你所存储的文件都小于16M的时候可以选择第一种方式进程文件存储,当文件大于16M的时候就要选择第二种GridFS方式进行存储
・我两种方式都有测试过,但是感觉在相同文件下存储速度第一种会更快一些,我不知道是哪里的问题,有知道的大佬还请指定指定
额,写博客只为分享交流并记录一下,如果有什么错误的地方还希望各位批评指正

引入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

方法一

使用BSON(Binary JSON:二进制JSON)格式来存储数据。

创建实体类UploadFile

@Data
@Document
public class UploadFile {
    @Id
    private String id;

    // 文件名
    private String name;

    // 上传时间
    private Date createdTime;

    // 文件内容
    private Binary content;

    // 文件类型
    private String contentType;

    // 文件大小
    private long size;
}

具体方法

@Autowired
private MongoTemplate mongoTemplate;

public static String uploadFile(File file){
        String fileName = file.getName();
        FileInputStream is = null;
        try {
            is = new FileInputStream(file);
            byte[] idImgBytes = new byte[(int)file.length()];
            is.read(idImgBytes);
            UploadFile uploadFile = new UploadFile();
            uploadFile.setName(fileName);
            uploadFile.setCreatedTime(new Date());
            uploadFile.setContent(new Binary(idImgBytes));
            uploadFile.setContentType(fileName.substring(fileName.lastIndexOf(".")));
            uploadFile.setSize(file.length());
            UploadFile savedFile = mongoTemplate.save(uploadFile);
            return savedFile.getId();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

上传成功返回id,失败返回null

方法二

GridFS是Mongo的一个子模块,使用GridFS可以基于MongoDB来持久存储文件。并且支持分布式应用(文件分布存储和读取)。作为MongoDB中二进制数据存储在数据库中的解决方案,通常用来处理大文件。

@Autowired
private GridFsTemplate gridFsTemplate;

public static String uploadFileToMongo(File file) {
        try {
            String fileName = file.getName();
            // 获得文件输入流
            InputStream ins = new FileInputStream(file);
            // 获得文件类型
            String contentType = fileName.substring(fileName.lastIndexOf(".") + 1);
            // 将文件存储到mongodb中,mongodb 将会返回这个文件的具体信息
            ObjectId store = gridFsTemplate.store(ins, fileName, contentType);
            return store.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南念-shmily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值