MongoDB 데이터베이스에 이미지 저장


174

텍스트가 아닌 MongoDB 데이터베이스에 이미지를 어떻게 저장할 수 있습니까? MongoDB 데이터베이스에서 이미지 배열을 만들 수 있습니까? 비디오에 대해 동일한 작업을 수행 할 수 있습니까?


1
짧은 대답은 : 예,으로 올바르게 인코딩하면 (작은) 이미지를 저장할 수 있습니다. stackoverflow.com/questions/11442356base64 참조 또한 menge.io/2015/03/24/storing-small-images-in- mongodb 는 아주 좋은 출발점입니다.
B--rian

답변:


108

이러한 이진 데이터 저장에 대한 자세한 내용은 GridFS 문서를 참조하십시오 .

특정 언어에 대한 지원은 화면 하단에 연결되어 있어야합니다.


40
GridFS는 16MB보다 큰 문서를위한 것입니다. 모든 이진 데이터가 이처럼 큰 것은 아닙니다. 이 한계를 능가하는 것 외에 BinData 유형 대신 GridFS를 사용하면 다른 이점이 있습니까?
Brandon Fitzpatrick

3
비디오는 16MB 이상인 경향이 있으므로이 대답은 합리적 일 것입니다. 그래도 이것을 언급해야합니다.
Chanoch

1
GridFS를 사용하는 대신 다른 솔루션이 있습니까?
Abhishek Mani

1
@AbhishekMani 다른 솔루션은 MongoDB에 전혀 저장하지 않는 것입니다. 이제 2018 년에이 데이터를 Amazon S3 또는 Azure BLOB 저장소와 같이 쓰기가 훨씬 쉬워졌습니다.
Gates VP

MongoDB의 말
xinbenlv

64

"16MB보다 큰 파일을 저장하려면 항상 GridFS를 사용해야합니다"-GridFS는 언제 사용해야합니까?

MongoDB BSON 문서 는 16MB로 제한됩니다. 따라서 파일 배열의 전체 크기가 이보다 작 으면 BinData 데이터 형식을 사용하여 문서에 직접 저장할 수 있습니다 .

비디오, 이미지, PDF, 스프레드 시트 등은 중요하지 않으며 모두 동일하게 취급됩니다. 적절한 컨텐츠 유형 헤더를 리턴하여 표시하는 것은 애플리케이션에 달려 있습니다.

자세한 내용 은 GridFS 설명서 를 확인하십시오.


24

당신은 이것을 시도 할 수 있습니다 :

String newFileName = "my-image";
File imageFile = new File("/users/victor/images/image.png");
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

13

http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb

NPM에는 mongoose-file이라는 Mongoose 플러그인이 있습니다. 파일 업로드를 위해 파일 필드를 몽구스 스키마에 추가 할 수 있습니다. 나는 그것을 사용한 적이 없지만 유용 할 수 있습니다. 이미지가 매우 작은 경우 Base64로 인코딩하여 문자열을 데이터베이스에 저장할 수 있습니다.

NodeJS WITH GridFS없이 MongoDB를 사용하여 작은 (1MB 미만) 파일 저장


8

스크립트 언어를 사용하여 MongoDB에 파일 / 이미지를 저장하는 경우 bin 데이터 유형을 사용할 수 있습니다. Bin 데이터는 작은 크기의 파일을 저장하기 위해 개발되었습니다.

스크립팅 언어 드라이버를 참조하십시오. PHP의 경우 여기를 클릭 하십시오 .


6

라이브러리 아래에 설치

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');

몽고 DB 연결 :

mongoose.connect(‘url_here’);

데이터베이스 스키마 정의

var Item = new ItemSchema(
  { img: 
  { data: Buffer, contentType: String }
 }
);
var Item = mongoose.model('Clothes',ItemSchema);

미들웨어 Multer를 사용하여 서버 측에 사진을 업로드하십시오.

app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));

우리의 DB에 요청을 게시

app.post(‘/api/photo’,function(req,res){
var newItem = new Item();
newItem.img.data = fs.readFileSync(req.files.userPhoto.path)
newItem.img.contentType = image/png’;
newItem.save();
});

이미지 배열을 추가하려면 어떻게해야합니까
Nikhil Patil

3
var upload = multer({dest: "./uploads"});
var mongo = require('mongodb');
var Grid = require("gridfs-stream");
Grid.mongo = mongo;

router.post('/:id', upload.array('photos', 200), function(req, res, next){
gfs = Grid(db);
var ss = req.files;
   for(var j=0; j<ss.length; j++){
     var originalName = ss[j].originalname;
     var filename = ss[j].filename;
     var writestream = gfs.createWriteStream({
         filename: originalName
     });
    fs.createReadStream("./uploads/" + filename).pipe(writestream);
   }
});

당신의 관점에서 :

<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">

이 코드를 사용하면 MongoDB에서 단일 이미지와 여러 이미지를 추가 할 수 있습니다.


0

이것은 나를 위해 일했다.

  1. CMD에서이 디렉토리로 이동하십시오.- C : \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. 다음 명령을 실행하십시오 : -mongofiles put image.jpg
  3. 선택한 파일의 경우 : -db.fs.files.find.pretty ()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.