[MONGODB] 나는 MongoDB를 사용하여 이미지를 저장하기 위해 어떤 데이터 유형을 사용해야합니까?
MONGODB나는 MongoDB를 사용하여 이미지를 저장하기 위해 어떤 데이터 유형을 사용해야합니까?
나는, 예를 들어 64 기수와 이미지가
data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9w....
어떻게 데이터베이스에 저장하려면? 스키마에있는 필드의 유형은 무엇을해야 하는가? 완충기?
해결법
-
==============================
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입니다 :
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
'MONGODB' 카테고리의 다른 글
[MONGODB] 날짜 별 자바 / MongoDB의 쿼리 (0) | 2019.12.20 |
---|---|
[MONGODB] 어떻게하여 MongoDB에서 필드를 증가 하는가? (0) | 2019.12.20 |
[MONGODB] MongoDB를 집계 쿼리는 $ 합계를 사용하여 적절한 금액을 반환하지 않습니다 (0) | 2019.12.20 |
[MONGODB] 시간에 의해 MongoDB의 그룹 (0) | 2019.12.20 |
[MONGODB] MongoDB의 로컬 시간대에서 집계 (0) | 2019.12.19 |