2017-07-02 1189 views
2

我有BASE64的图像(例如数据:图像/ JPEG; BASE64,/ 9J/4AAQSkZJRgABAgAAAQABAAD/7QCcUGhvdG9zaG9w ....)我应该使用什么数据类型来存储base64字符串?

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

+0

那么这是一个“字符串”,而它的的base64,但如果你转换它,那么你实际上可以存储为二进制。取决于你想要做什么。 –

+0

我想将图像存储在数据库中,哪个更好?存储为字符串还是要转换为二进制? –

+0

https://stackoverflow.com/questions/16245767/creating-a-blob-from-a-base64-string-in-javascript二进制。 Base64编码使其“更大”。您只能使用它,因为您只能发送“字符串”。所以'二进制'。有一个MongoDB BSON类型和架构类型。 –

回答

2

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

更长的形式是为了证明:

  • 从文件读取图像(或任何二进制数据)
  • 的Base64编码的数据(只是为了显示这是可以做到)
  • 变回从BASE64二进制数据(只是为了显示这是可以做到)
  • 存储二进制数据在数据库
  • 读取二进制数据从数据库
  • 输出继电器的二进制数据到一个新的文件

所以架构部分很简单,只需使用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玩:

enter image description here

+0

太棒了,谢谢(: –

相关问题