我应该使用什么数据types来存储base64string?

我有一个base64的图像(例如data:image / jpeg; base64,/ 9j / 4AAQSkZJRgABAgAAAQABAAD / 7QCcUGhvdG9zaG9w ….)

如何保存在数据库中? 模式中字段的types应该是什么? 缓冲?

简短的答案是存储为“二进制”,为此,在mongoose模式中,您可以使用Buffer来执行此操作。

更长的forms是certificate:

  • 从文件读取图像(或任何二进制数据)
  • Base64对这些数据进行编码(只是为了表明它可以完成)
  • 从base64转回到二进制数据(只是为了显示它可以完成)
  • 将二进制数据存储在数据库中
  • 从数据库读取二进制数据
  • 将二进制数据输出到新文件

所以Schema部分很简单,只需使用Buffer

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

然后,所有要做的就是按照这个过程,把二进制数据放到属性中,然后再读出来。

请注意,如果你是直接从一个MIMEtypes的string就可以了:

  data:image/png;base64,long-String 

只需使用javascript .split()并为base64string本身取第二个数组索引:

 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玩:

在这里输入图像描述