복붙노트

[MONGODB] C 번호와 MongoDB를 GridFs, 어떻게 이미지와 같은 파일을 저장하려면?

MONGODB

C 번호와 MongoDB를 GridFs, 어떻게 이미지와 같은 파일을 저장하려면?

내 백엔드로 MongoDB를 가진 웹 응용 프로그램을 개발하고 있어요. 내가 좋아하는 자신의 프로필에 사용자 업로드 사진을 가지고 싶은 연결된에서 프로필 그림. 나는 MVC2과 aspx 페이지를 사용하고 있는데 나는 GridFs 라이브러리 바이너리로 큰 파일 형식을 저장하는 데 사용됩니다 읽어 보시기 바랍니다. 나는이 작업을 수행하는 방법으로 실마리를 찾아 봤는데하지만 MongoDB를 C #을 API 또는 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());

해결법

  1. ==============================

    1.파일을 저장하고 gridfs (공식 MongoDB의 드라이버를 사용)에서 다시 읽는 방법을 예를 보여 다음 :

    파일을 저장하고 gridfs (공식 MongoDB의 드라이버를 사용)에서 다시 읽는 방법을 예를 보여 다음 :

     var server = MongoServer.Create("mongodb://localhost:27020");
     var database = server.GetDatabase("tesdb");
    
     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);
           } 
        }
     }
    

    결과 :

    파일:

    덩어리 컬렉션 :

    이 도움을 바랍니다.

  2. ==============================

    2.위의 대답은 곧입니다 이제 2.1 RC-0 드라이버가 출시되었습니다 오래된 것일 수 있습니다.

    위의 대답은 곧입니다 이제 2.1 RC-0 드라이버가 출시되었습니다 오래된 것일 수 있습니다.

    GridFS와 2.1 MongoDB의에서 파일 작업을하는 방법은 이제이 방법을 수행 할 수 있습니다 :

    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 # 드라이버 테스트에 DIFF에서 가져옵니다

  3. ==============================

    3.이 예제는 객체에 문서를 묶을 수 있습니다

    이 예제는 객체에 문서를 묶을 수 있습니다

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MongoDB.Driver;
    using MongoDB.Driver.Linq;
    using MongoDB.Bson;
    using MongoDB.Driver.Builders;
    using MongoDB.Driver.GridFS;
    using System.IO;
    
    namespace ConsoleApplication1
    {
    class Program
    {
        static void Main(string[] args)
        {
            MongoServer ms = MongoServer.Create();
            string _dbName = "docs";
    
            MongoDatabase md = ms.GetDatabase(_dbName);
            if (!md.CollectionExists(_dbName))
            {
                md.CreateCollection(_dbName);
            }
    
            MongoCollection<Doc> _documents = md.GetCollection<Doc>(_dbName);
            _documents.RemoveAll();
            //add file to GridFS
    
            MongoGridFS gfs = new MongoGridFS(md);
            MongoGridFSFileInfo gfsi = gfs.Upload(@"c:\mongodb.rtf");
            _documents.Insert(new Doc()
            {
                DocId = gfsi.Id.AsObjectId,
                DocName = @"c:\foo.rtf"
            }
            );
    
            foreach (Doc item in _documents.FindAll())
            {
                ObjectId _documentid = new ObjectId(item.DocId.ToString());
                MongoGridFSFileInfo _fileInfo = md.GridFS.FindOne(Query.EQ("_id", _documentid));
                gfs.Download(item.DocName, _fileInfo);
                Console.WriteLine("Downloaded {0}", item.DocName);
                Console.WriteLine("DocName {0} dowloaded", item.DocName);
            }
    
            Console.ReadKey();
        }
    }
    
    class Doc
    {
        public ObjectId Id { get; set; }
        public string DocName { get; set; }
        public ObjectId DocId { get; set; }
    }
    
  4. from https://stackoverflow.com/questions/4988436/mongodb-gridfs-with-c-how-to-store-files-such-as-images by cc-by-sa and MIT license