복붙노트

[MONGODB] GridFS없이 NodeJS에서 MongoDB를 가진 파일 (1메가바이트에서) 몇 가지 작은 저장

MONGODB

GridFS없이 NodeJS에서 MongoDB를 가진 파일 (1메가바이트에서) 몇 가지 작은 저장

나는 웹 사이트를 실행하는 것이 nodeJS + MongoDB를의 백엔드에서 실행됩니다. 지금, 나는 데이터베이스에있을 필요가 몇 가지 아이콘을 저장하는 시스템 (작은 이미지 파일)을 구현하고 있습니다.

그 중 큰 파일 또는 파일의 큰 숫자에 맞춰 것으로 보인다 때문에 나의 이해에서, 그것은, 사용 GridFS에 더 많은 의미를 NOT합니다. 나는 BSON 최대 파일 크기에 따라 잘 될 것입니다 저장하는 데 필요한 모든 파일 때문에, 나는 일반 문서에 직접 저장할 수 있어야합니다.

나는이 개 질문이 :

1) 내 추론이 맞습니까? GridFS와는 달리 그것은 일반 몽고 모음 내에서 이미지 파일을 저장하려면 확인인가? 거기에 아무것도 내가해야한다고 여기 고려하고 있지 않다 있습니까?

내 생각 프로세스가 소리 경우 2), 내가 어떻게이 일을 가야합니까? 나는 다음과 같은 일을 할 수 :

//assume 'things' is a mongoDB collection created properly using node-mongodb-driver

fs.readFile(pathToIconImage, function(err,image){
  things.insert({'image':image}, function(err,doc){
    if(err) console.log('you have an error! ' + err);
  });
});

나는 MongoDB를가 BSON를 사용하고 여기에 내가 데이타베이스를 보내기 전에 JSON에서 파일을 저장하는 것을 시도하고 있기 때문에, 아마이 할 수있는 더 좋은 방법이 같은데요. 이 코드는 (그것을 시도하지 않은) 작동하는지 나는 또한 모른다.

UPDATE - 새로운 질문

내가 저장 한 세 가지 정보가 집합 내에서 문서가있는 경우 : 1) 이름 2) 날짜, 3) 이미지 파일 (위의 아이콘)을, 나는 위해 클라이언트에이 문서를 보내려면 이것이 가능한 것, 세 가지 표시? 그렇지 않으면, 나는 이미지 자체 대신에 사용 GridFS에와 FileID에 저장해야 할 것 같아요. 생각 / 제안?

어떤 응답, 사미위한 최고의, 감사

해결법

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

    1.이미지가 진정 문서 크기에 문제가없는 작은 충분하고 추가 처리의 작은 금액을 상관하지 않는 경우, 그냥 컬렉션에 직접 저장에 아마 괜찮아요. base64로 이미지를 인코딩에 당신이 원하는거야하려면, 다음 몽고의 BinData 유형을 사용하여 저장합니다. 크기가 원래 바이너리 이미지보다 크게 성장하지 않도록 다음 선방 BSON 비트 배열로, 실제로는 base64로 문자열을 저장하지 내가 알고있는 것처럼, 그 것이다.

    이미지가 진정 문서 크기에 문제가없는 작은 충분하고 추가 처리의 작은 금액을 상관하지 않는 경우, 그냥 컬렉션에 직접 저장에 아마 괜찮아요. base64로 이미지를 인코딩에 당신이 원하는거야하려면, 다음 몽고의 BinData 유형을 사용하여 저장합니다. 크기가 원래 바이너리 이미지보다 크게 성장하지 않도록 다음 선방 BSON 비트 배열로, 실제로는 base64로 문자열을 저장하지 내가 알고있는 것처럼, 그 것이다.

    그것은 당신이 바이너리 이미지 등을 얻을하는 데 사용할 수있는 base64로 문자열과 같은 JSON 쿼리에 표시됩니다.

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

    2.나는 같은 일을 찾고있다. 이 게시물은 오래 알고 있지만, 아마도 내가이 사람을 도울 수 있습니다.

    나는 같은 일을 찾고있다. 이 게시물은 오래 알고 있지만, 아마도 내가이 사람을 도울 수 있습니다.

    var fs = require('fs');
    var mongo = require('mongodb').MongoClient;
    var Binary = require('mongodb').Binary;
    
    var archivobin = fs.readFileSync("vc.exe"); 
    // print it out so you can check that the file is loaded correctly
    console.log("Loading file");
    console.log(archivobin);
    
    var invoice = {};
    invoice.bin = Binary(archivobin);
    
    console.log("largo de invoice.bin= "+ invoice.bin.length());
    // set an ID for the document for easy retrieval
    invoice._id = 12345; 
      mongo.connect('mongodb://localhost:27017/nogrid', function(err, db) {
      if(err) console.log(err);
         db.collection('invoices').insert(invoice, function(err, doc){
        if(err) console.log(err);
      // check the inserted document
        console.log("Inserting file");
        console.log(doc);
    
        db.collection('invoices').findOne({_id : 12345}, function(err, doc){
          if (err) {
            console.error(err);
            }
    
          fs.writeFile('vcout.exe', doc.bin.buffer, function(err){
              if (err) throw err;
              console.log('Sucessfully saved!');
        });
    
        });
      });
    });
    
  3. from https://stackoverflow.com/questions/11442356/storing-some-small-under-1mb-files-with-mongodb-in-nodejs-without-gridfs by cc-by-sa and MIT license