.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