我有BASE64的圖像(例如數據:圖像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9w ....)我應該使用什麼數據類型來存儲base64字符串?
如何在數據庫中保存?模式中字段的類型應該是什麼?緩衝?
我有BASE64的圖像(例如數據:圖像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9w ....)我應該使用什麼數據類型來存儲base64字符串?
如何在數據庫中保存?模式中字段的類型應該是什麼?緩衝?
簡短的答案是存儲爲「二進制」,對於其在貓鼬模式中可以使用Buffer
來執行此操作。
更長的形式是爲了證明:
所以架構部分很簡單,只需使用Buffer
:
var albumnSchema = new Schema({
name: String,
image: Buffer
})
然後全部要做的就是按照程序,並把二進制數據到財產,並再次閱讀它。
注意的是,如果您是直接從MIME類型上有一個字符串來想:
data:image/png;base64,long-String
只需使用JavaScript .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 albumnSchema = new Schema({
name: String,
image: Buffer
})
const Albumn = mongoose.model('Albumn', albumnSchema);
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');
Albumn.create({
"title": "burger",
"image": burger
},callback)
},
// Get from the database
(albumn,callback) => Albumn.findOne().exec(callback),
// Show the data record and write out to a new file.
(albumn,callback) => {
console.log(albumn);
fs.writeFile('./output.png', albumn.image, callback)
}
],
callback
)
],
(err) => {
if (err) throw err;
mongoose.disconnect();
}
)
這裏是一個burger.png玩:
太棒了,謝謝(: –
那麼這是一個「字符串」,而它的的base64,但如果你轉換它,那麼你實際上可以存儲爲二進制。取決於你想要做什麼。 –
我想將圖像存儲在數據庫中,哪個更好?存儲爲字符串還是要轉換爲二進制? –
https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript二進制。 Base64編碼使其「更大」。您只能使用它,因爲您只能發送「字符串」。所以'二進制'。有一個MongoDB BSON類型和架構類型。 –