[MONGODB] C 번호와 MongoDB를 GridFs, 어떻게 이미지와 같은 파일을 저장하려면?
MONGODBC 번호와 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.파일을 저장하고 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.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.이 예제는 객체에 문서를 묶을 수 있습니다
이 예제는 객체에 문서를 묶을 수 있습니다
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; } }
from https://stackoverflow.com/questions/4988436/mongodb-gridfs-with-c-how-to-store-files-such-as-images by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게하여 MongoDB에서이 스키마를 구현해야합니까? (0) | 2019.12.05 |
---|---|
[MONGODB] 어떻게 그것을 만든 후 몽구스의 하위 문서를 채우는? (0) | 2019.12.05 |
[MONGODB] MongoDB를에 개체의 배열에서 검색하는 방법 (0) | 2019.12.05 |
[MONGODB] JSON 파일의 Mongoimport (0) | 2019.12.05 |
[MONGODB] MongoDB를 로컬 서버를 시작할 수 없습니다 (0) | 2019.12.05 |