.Net Core之MongoDB存储文件

本文介绍了如何在.Net Core中利用MongoDB的GridFS进行文件存储。内容涉及MongoDB的基础使用,强调在.Net Core下进行可配置化文件上传的复杂性,并指出微软官方提供了一定的配置方案,最终实现文件上传和下载接口的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.Net Core之MongoDB存储文件

MongoDB提供了GridFS来存储文件,我们这里就讨论采用GridFS存储文件的方案

这里主要使用MongoDB.Driver相关库

  • MongoDB的一些基本使用:

    public class MongoFileRepo
        {
            private IMongoClient _client;
            private IMongoDatabase _db;
            private readonly IGridFSBucket bucket;
            //注入相关配置
            public MongoFileRepo(IOptions<Settings> settings)
            {
                _client = new MongoClient(settings.Value.ConnectionString_MongoDB);
                _db = _client.GetDatabase("MongoDB");
                bucket = new GridFSBucket(_db);
            }
    
            public ObjectId GetInternalId(string id)
            {
                if (!ObjectId.TryParse(id, out ObjectId internalId))
                    internalId = ObjectId.Empty;
    
                return internalId;
            }
    
            public async Task<GridFSFileInfo> GetFileById(string id)
            {
                var filter = Builders<GridFSFileInfo>.Filter.Eq("_id", GetInternalId(id));
                return await bucket.Find(filter).FirstOrDefaultAsync();
            }
    
            public async Task<GridFSFileInfo> GetFileById(ObjectId id)
            {
                var filter = Builders<GridFSFileInfo>.Filter.Eq("_id", id);
                return await bucket.Find(filter).FirstOrDefaultAsync();
            }
    
            public async Task<ObjectId> UploadFile(string fileName, Stream source)
            {
                var id = await bucket.UploadFromStreamAsync(fileName, source);
                return id;
            }
    
            public async Task<GridFSDownloadStream<ObjectId>> DownloadFileStreamSeekable(string id)
            {
                var options = new GridFSDownloadOptions
                {
                    Seekable = true
                };
                return await bucket.OpenDownloadStreamAsync(GetInternalId(id), options);
            }
    
            public async Task<GridFSDownloadStream<ObjectId>> DownloadFileStreamSeekable(ObjectId id)
            {
                var options = new GridFSDownloadOptions
                {
                    Seekable = true
                };
                return await bucket.OpenDownloadStreamAsync(id, options);
            }
    
            public async Task<GridFSDownloadStream<ObjectId>> DownloadFileStream(string id)
            {
                return await bucket.OpenDownloadStreamAsync(GetInternalId(id));
            }
    
            public async Task<GridFSDownloadStream<ObjectId>> Dow
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值