복붙노트

[MONGODB] 나는 MongoDB를 사용하여 이미지를 저장하기 위해 어떤 데이터 유형을 사용해야합니까?

MONGODB

나는 MongoDB를 사용하여 이미지를 저장하기 위해 어떤 데이터 유형을 사용해야합니까?

나는, 예를 들어 64 기수와 이미지가

data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9w....

어떻게 데이터베이스에 저장하려면? 스키마에있는 필드의 유형은 무엇을해야 하는가? 완충기?

해결법

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

    1.짧은 대답은 몽구스 스키마에이 작업을 수행하기 위해 버퍼를 사용할 수있는 "진"으로 저장소입니다.

    짧은 대답은 몽구스 스키마에이 작업을 수행하기 위해 버퍼를 사용할 수있는 "진"으로 저장소입니다.

    긴 형태는 다시 원래의 바이너리로 시작 변환의 왕복을 보여주는 것이다. Base64로 인코딩 / 디코딩은 대부분의 실제 경우에 필요한 단계 아니며, 데모 용 단지가있다 :

    스키마 부분은 간단 그래서, 단지 버퍼를 사용합니다 :

    var albumSchema = new Schema({
      name: String,
      image: Buffer
    })
    

    해야 할 모든 일하려고하는 과정을 따라 재산에 바이너리 데이터를 입력하고 다시 다시 읽어이다.

    참고하지만 당신이 그것에 MIME 타입 등으로 문자열에서 직접 오는 경우 :

      data:image/png;base64,long-String
    

    그냥 자바 스크립트 .split을 (사용)과 base64로 문자열 자체에 대한 두 번째 배열 인덱스를 가지고 :

    var string = "data:image/png;base64,long-String"
    var bindata = new Buffer(string.split(",")[1],"base64");
    

    여기에서 밖으로 완전한 데모와 목록입니다 :

    const async = require('async'),
          mongoose = require('mongoose'),
          Schema = mongoose.Schema,
          fs = require('fs');
    
    mongoose.Promise = global.Promise;
    mongoose.set('debug',true);
    mongoose.connect('mongodb://localhost/test');
    
    var albumSchema = new Schema({
      name: String,
      image: Buffer
    })
    
    const Album = mongoose.model('Albumn', albumSchema);
    
    
    async.series(
      [
        (callback) =>
          async.each(mongoose.models,(model,callback) =>
            model.remove({},callback),callback),
    
        (callback) =>
          async.waterfall(
            [
              (callback) => fs.readFile('./burger.png', callback),
    
              (data,callback) => {
                // Convert to Base64 and print out a bit to show it's a string
                let base64 = data.toString('base64');
                console.log(base64.substr(0,200));
    
                // Feed out string to a buffer and then put it in the database
                let burger = new Buffer(base64, 'base64');
                Album.create({
                  "title": "burger",
                  "image": burger
                },callback)
              },
    
              // Get from the database
              (album,callback) => Album.findOne().exec(callback),
    
              // Show the data record and write out to a new file.
              (album, callback) => {
                console.log(album);
                fs.writeFile('./output.png', album.image, callback)
              }
    
            ],
            callback
          )
    
    
      ],
      (err) => {
        if (err) throw err;
        mongoose.disconnect();
      }
    )
    

    또는 비교를 위해 좀 더 현대적인 문법과 API 사용에 :

    const fs = require('mz/fs');
    const { Schema } = mongoose = require('mongoose');
    
    const uri = 'mongodb://localhost:27017/test';
    const opts = { useNewUrlParser: true };
    
    mongoose.Promise = global.Promise;
    mongoose.set('debug', true);
    mongoose.set('useFindAndModify', false);
    mongoose.set('useCreateIndex', true);
    
    const albumSchema = new Schema({
      name: String,
      image: Buffer
    });
    
    const Album = mongoose.model('Album', albumSchema);
    
    (async function() {
    
      try {
    
        const conn = await mongoose.connect(uri, opts);
    
        await Promise.all(
          Object.entries(conn.models).map(([k, m]) => m.deleteMany())
        )
    
        let data = await fs.readFile('./burger.png');
    
        // Convert to Base64 and print out a bit to show it's a string
        let base64 = data.toString('base64');
        console.log(base64.substr(0,200));
    
        // Feed out string to a buffer and then put it in the database
        let burger = new Buffer(base64, 'base64');
        await Album.create({ "title": "burger", "image": burger });
    
        // Get from the database
        // - for demo, we could have just used the return from the create() instead
        let album =  Album.findOne();
    
        // Show the data record and write out to a new file.
        console.log(album);
        await fs.writeFile('./output.png', album.image)
    
    
      } catch(e) {
        console.error(e);
      } finally {
        mongoose.disconnect()
      }
    
    })()
    

    그리고 심지어이 중 하나를 선호하거나 당신은 여전히 ​​비동기 / await를 지원하지 않고 NodeJS를 사용하는 "일반 약속"와. 하지만 당신은 정말 v6.x에 도달 4 월 2019 년에 수명이 고려해서는 안됩니다 :

    // comments stripped - refer above
    const fs = require('mz/fs');
    const { Schema } = mongoose = require('mongoose');
    
    const uri = 'mongodb://localhost:27017/test';
    const opts = { useNewUrlParser: true };
    
    mongoose.Promise = global.Promise;
    mongoose.set('debug', true);
    mongoose.set('useFindAndModify', false);
    mongoose.set('useCreateIndex', true);
    
    const albumSchema = new Schema({
      name: String,
      image: Buffer
    });
    
    mongoose.connect(uri, opts)
      .then(conn =>
        Promise.all(
          Object.entries(conn.models).map(([k, m]) => m.deleteMany())
        )
      )
      .then(() => fs.readFile('./burger.png'))
      .then(data => {
        let base64 = data.toString('base64');
        console.log(base64.substr(0,200));
        let burger = new Buffer(base64, 'base64');
        return Album.create({ "title": "burger", "image": burger });
      })
      .then(() => Album.findOne() )
      .then(album => {
        console.log(album);
        return fs.writeFile('./output.png', album.image)
      })
      .catch(console.error)
      .then(() => mongoose.disconnect());
    

    그리고 여기에 플레이하는 burger.png입니다 :

  2. from https://stackoverflow.com/questions/44869479/what-data-type-should-i-use-to-store-an-image-with-mongodb by cc-by-sa and MIT license