2013-10-31 10 views
0

下面的代碼示例:GridFS.Upload()不上載流內容

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#驅動。

回答

4

這裏的問題不是mongodb API。

每個在(內存)流上寫入都會將其位置增加到新的一端。現在,每個後續對該流的讀取操作都從該位置開始,該位置指向流結束。

您有兩種選擇。

在將流傳遞給上傳之前設置ms.Position = 0。或者將artifactContent傳遞給MemoryStream構造器,該構造器使用該數據初始化流,而不更改其位置。