2017-07-02 1197 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

太棒了,謝謝(: –

相關問題