我有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类型和架构类型。 –