以下示例代码:
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#驱动程序。
答案 0 :(得分:4)
这里的问题不是mongodb API。
每次写入(内存)流都会将其位置增加到新端。现在,对流的每个后续读取操作都从该位置开始,该位置指向流的末尾。
您有两种选择。
在将流传递给Upload之前设置ms.Position = 0。或者将artifactContent传递给MemoryStream构造函数,该构造函数使用该数据初始化流而不更改其位置。