MongoDB GridFs с C#, как хранить файлы, такие как изображения?

Я разрабатываю веб-приложение с mongodb как мой бэкенд. Я хотел бы сделать, чтобы пользователи загрузили картинки к своим профилям как связанный - в рис. профиля. Я использую aspx страницу с MVC2, и я читал, что библиотекой GridFs пользуются для хранения больших типов файлов как двоичных файлов. Я везде искал подсказки как, как это сделано, но mongodb не имеет никакой документации для API C# или GridFs C#. Я экранирован и смущен, мог действительно использовать другой набор мозгов.

Кто-либо, которого каждый знает, как на самом деле реализовать контроллер загрузки файла, который хранит изображение, загруженное пользователем в mongodb набор? Миллион благодарностей!

Я попробовал изменения этого напрасно.

Database db = mongo.getDB("Blog");
GridFile file = new GridFile(db);
file.Create("image.jpg");

var images = db.GetCollection("images");
images.Insert(file.ToDocument());
62
задан 30 December 2013 в 13:08

1 ответ

Ответы выше должны скоро устареть теперь, когда 2,1 RC 0 драйверов были выпущены.

способ работать с файлами в v2.1 MongoDB с GridFS может теперь быть сделан этот путь:

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.GridFS;
using System.IO;
using System.Threading.Tasks;

namespace MongoGridFSTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new MongoClient("mongodb://localhost");
            var database = client.GetDatabase("TestDB");
            var fs = new GridFSBucket(database);

            var id = UploadFile(fs);

            DownloadFile(fs, id);
        }

        private static ObjectId UploadFile(GridFSBucket fs)
        {
            using (var s = File.OpenRead(@"c:\temp\test.txt"))
            {
                var t = Task.Run<ObjectId>(() => { return 
                    fs.UploadFromStreamAsync("test.txt", s);
                });

                return t.Result;
            }
        }

        private static void DownloadFile(GridFSBucket fs, ObjectId id)
        {
            //This works
            var t = fs.DownloadAsBytesByNameAsync("test.txt");
            Task.WaitAll(t);
            var bytes = t.Result;


            //This blows chunks (I think it's a driver bug, I'm using 2.1 RC-0)
            var x = fs.DownloadAsBytesAsync(id);
            Task.WaitAll(x);
        }
    }
}

Это взято от разности на тестах драйвера C# здесь

18
ответ дан 31 October 2019 в 13:53

Другие вопросы по тегам:

Похожие вопросы: