2015-05-10 1 views
2

Я использую MonoDevelop на PC-BSD 10.1 и работаю с MongoDB 3.2. Я загрузил MongoDB.Driver (+ Bson & Core) от Nuget. Я могу сделать основной читает и пишет и пытается получить GridFS рабочих, следуя, что, как представляется, наиболее актуальным примером из StackOverflow:Использование GridFS с официальным драйвером C# в MonoDevelop

MongoDB GridFs with C#, how to store files such as images?

Во-первых, моя система не распознает (на первый взгляд) статический MongoServer класс, поэтому я перехожу к MognoClient для получения базы данных. Тогда я получаю следующее: «можно было бы узнать тип MongoDB.Driver.IMongoDatabase' does not contain a definition for GridFS 'и без расширения метод GridFS' of type MongoDB.Driver.IMongoDatabase.»

using System; 
using System.IO; 
using MongoDB; 
using MongoDB.Driver; 
using MongoDB.Driver.Core; 
using MongoDB.Bson; 
//using MongoDB.Driver.GridFS; -> an attempt to use the legacy driver. 


namespace OIS.Objektiv.SocketServer 
{ 
    public class Gridfs 
    { 
     public Gridfs() 
     { 

      var server = MongoServer.Create("mongodb://localhost:27017"); 
      var database = server.GetDatabase("test"); 

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

      var fileName = "D:\\Untitled.png"; 
      var newFileName = "D:\\new_Untitled.png"; 
      using (var fs = new FileStream(fileName, FileMode.Open)) 
      { 
       var gridFsInfo = database.GridFS.Upload(fs, fileName); 
       var fileId = gridFsInfo.Id; 

       ObjectId oid= new ObjectId(fileId); 
       var file = database.GridFS.FindOne(Query.EQ("_id", oid)); 

       using (var stream = file.OpenRead()) 
       { 
        var bytes = new byte[stream.Length]; 
        stream.Read(bytes, 0, (int)stream.Length); 
        using(var newFs = new FileStream(newFileName, FileMode.Create)) 
        { 
         newFs.Write(bytes, 0, bytes.Length); 
        } 
       } 
      } 
     } 
    } 
} 

Что глупая ошибка я сделал? Есть ли у GridFS зависимость, которой я не хватает? Это должно сработать! :(

Dinsdale

ответ

3

Вы скачали версию драйвера 2.0. В настоящее время она не имеет API GridFS. Вы можете отслеживать эту функцию здесь (https://jira.mongodb.org/browse/CSHARP-1191). Кроме того, MongoServer ушел в 2.0 API .

Однако есть оболочка для унаследованного API доступен доступны, если вы тянете пакет mongocsharpdriver NuGet. при том, что вы будете иметь как MongoServer и GridFS.

+0

Как использовать эту оболочку? –

+0

Чтобы использовать старый API, вы должны получить MongoServer от MongoClient, а затем получить MongoDatabase от MongoServer. Если вы получаете MongoDatabase напрямую из MongoClient, вы будете использовать новый API. –

10

с водителем версии 2.2 вы делаете загрузить отдельный пакет NuGet под названием MongoDB.Driver.GridFS.

Вы можете использовать его таким образом:

IMongoDatabase database; 

var bucket = new GridFSBucket(database, new GridFSOptions 
{ 
    BucketName = "videos", 
    ChunkSizeBytes = 1048576, // 1MB 
    WriteConcern = WriteConcern.Majority, 
    ReadPreference = ReadPeference.Secondary 
}); 

IGridFSBucket bucket; 
bytes[] source; 
var options = new GridFSUploadOptions 
{ 
    ChunkSizeBytes = 64512, // 63KB 
    Metadata = new BsonDocument 
    { 
     { "resolution", "1080P" }, 
     { "copyrighted", true } 
    } 
}; 

var id = bucket.UploadFromBytes("filename", source, options); 

Here the full doc.

+0

Отличный ответ, должен быть ответом на вопрос! – BendEg

+0

Я согласен с тобой! :) – danyolgiax