programing

MongoDB를 사용하여 노드에 일부 작은(1MB 미만) 파일 저장그리드FS 미포함 JS

padding 2023. 6. 27. 21:50
반응형

MongoDB를 사용하여 노드에 일부 작은(1MB 미만) 파일 저장그리드FS 미포함 JS

노드의 백엔드에서 실행되는 웹 사이트를 실행하는 경우JS + mongoDB.현재 데이터베이스에 저장해야 할 아이콘(작은 이미지 파일)을 저장하는 시스템을 구축하고 있습니다.

제가 알기로는 GridFS를 사용하지 않는 것이 더 타당합니다. 왜냐하면 GridFS는 큰 파일이나 많은 파일에 맞게 조정된 것 같기 때문입니다.저장해야 할 모든 파일이 BSON 최대 파일 크기보다 훨씬 작을 것이기 때문에 일반 문서에 직접 저장할 수 있을 것입니다.

두 가지 질문이 있습니다.

제 추론이 맞습니까?GridFS와 달리 이미지 파일을 일반 mongo 컬렉션에 저장해도 괜찮습니까?제가 여기서 고려하지 않는 것 중에 제가 해야 할 것이 있나요?

만약 제 사고 과정이 건전하다면, 어떻게 해야 할까요?다음과 같은 작업을 수행할 수 있습니까?

//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에 파일을 저장하려고 합니다.저도 이 코드가 작동할지 모르겠어요(아직 시도하지 않았습니다).

업데이트 - 새 질문

1) 이름, 2) 날짜, 3) 이미지 파일(위 아이콘)의 세 가지 정보가 저장된 문서가 컬렉션에 있는데, 이 문서를 클라이언트에게 보내 세 가지 모두 표시하려고 하면 가능합니까?그렇지 않으면 GridFS를 사용하여 파일을 저장해야 할 것 같습니다.이미지 자체 대신 ID를 입력합니다.생각/제안?

최고입니다, 그리고 응답해 주셔서 감사합니다.
사미

이미지가 문서 크기에 문제가 되지 않을 정도로 작고 약간의 추가 처리에도 문제가 없다면 컬렉션에 직접 저장하는 것도 괜찮을 것입니다.그렇게 하려면 이미지를 base64로 인코딩한 다음 mongo의 BinData 유형을 사용하여 저장합니다.제가 이해하기로는, 그러면 Base64 문자열을 실제로 저장하지 않고 BSON 비트 배열로 저장할 것이므로 크기가 원래 이진 이미지보다 커지지 않습니다.

json 쿼리에 base64 문자열로 표시되며, 이 문자열을 사용하여 이진 이미지를 다시 가져올 수 있습니다.

저는 같은 것을 찾고 있었습니다.이 게시물이 오래된 것은 알지만, 아마도 저는 누군가를 도울 수 있을 것입니다.

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!');
    });

    });
  });
});

언급URL : https://stackoverflow.com/questions/11442356/storing-some-small-under-1mb-files-with-mongodb-in-nodejs-without-gridfs

반응형