GridFS.Upload()不上传流内容

时间:2013-10-31 14:07:28

标签: c# mongodb mongodb-.net-driver gridfs

以下示例代码:

using (var ms = new MemoryStream())
{
    var artifactContent = Encoding.UTF8.GetBytes("content of some file/upload/etc as string");
    ms.Write(artifactContent, 0, artifactContent.Length);

    // ms.Lenght > 0


    var gridFsCreateOptions = new MongoGridFSCreateOptions {ContentType = "text/plain"};
    var gridFsFileInfo = mongoGridFsDatabase.GridFS.Upload(ms, "Test.txt", gridFsCreateOptions);

    // stream is not uploaded and gridFsFileInfo.Lenght == 0
}

fs.files集合已填充,但fs.chunks集合为空。

我的代码有什么问题? 我在Win8上使用MongoDB 2.4.7,在NuGet上使用官方C#驱动程序。

1 个答案:

答案 0 :(得分:4)

这里的问题不是mongodb API。

每次写入(内存)流都会将其位置增加到新端。现在,对流的每个后续读取操作都从该位置开始,该位置指向流的末尾。

您有两种选择。

在将流传递给Upload之前设置ms.Position = 0。或者将artifactContent传递给MemoryStream构造函数,该构造函数使用该数据初始化流而不更改其位置。