You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Web API 无法查询MongoDB GridFS中存储文件的问题

问题原因

你当前的GridFS存储使用了自定义的bucket名称videos,对应数据库中的videos.files、videos.chunks两个集合。但C#代码初始化GridFSBucket时使用了默认构造参数,默认会查找名为fs的bucket,对应fs.files、fs.chunks集合,因此查询无结果返回null,后续访问fileInfo的属性时就触发了空引用异常。

修复方案

修改GridFSBucket初始化代码,显式指定Bucket名称为videos即可,修改后的代码如下:

var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("db_gridfs");

var movieName = "The Video.mp4";

// 初始化时指定自定义Bucket名称
IGridFSBucket bucket = new GridFSBucket(database, new GridFSBucketOptions
{
    BucketName = "videos"
});
var filter = Builders<GridFSFileInfo>.Filter.Eq(x => x.Filename, movieName);

using (var cursor = await bucket.FindAsync(filter))
{
    var fileInfo = (await cursor.ToListAsync()).FirstOrDefault();
    // 建议先判空再访问属性,避免无数据时抛出异常
    if (fileInfo != null)
    {
        Console.WriteLine($"{nameof(fileInfo.Id)}: {fileInfo.Id}");
        Console.WriteLine($"{nameof(fileInfo.Filename)}: {fileInfo.Filename}");
        Console.WriteLine($"{nameof(fileInfo.Length)}: {fileInfo.Length}");
        Console.WriteLine($"{nameof(fileInfo.ChunkSizeBytes)}: {fileInfo.ChunkSizeBytes}");
        Console.WriteLine($"{nameof(fileInfo.UploadDateTime)}: {fileInfo.UploadDateTime}");
    }
    else
    {
        Console.WriteLine("未找到匹配的文件");
    }
}

补充说明

如果需要按文件ID查询,注意传入的ID类型需要和数据库中存储的_id类型匹配,你当前库中存储的是ObjectId类型,不要直接传入字符串ID,需要先转换为ObjectId类型再构造查询条件。

内容的提问来源于stack exchange,提问作者siles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:57:00