2017-02-22 73 views
1

所以在前端我有這段代碼。流星NodeJs base64轉換回文件

uploadCallback (file) { 
    // TODO: Integrate dropbox with its SDK 
    // TODO: Pass the link to the editor 
    console.log('file', file) 
    this.getBase64(file, this) 
    } 
    getBase64 (file, self) { 
    const reader = new FileReader() 
    reader.readAsDataURL(file) 
    reader.onload = function() { 
     console.log('reader.result', reader.result) 
     self.sendFileToServer(reader.result) 
    } 
    reader.onerror = function (error) { 
     console.log('Error: ', error) 
    } 
    } 
    sendFileToServer (base64File) { 
    return new Promise(
     (resolve, reject) => { 
     console.log('uploadCallback promise') 
     Meteor.call('uploadToDropbox', base64File, function (error, result) { 
      console.log('uploadToDropbox callback') 
      if (error) { 
      console.log('error', error) 
      } 
      if (result) { 
      console.log('result', result) 
      } 
     }) 
     } 
    ) 
    } 

它將文件對象轉換爲base64並傳遞給調用的方法。而在服務器這裏是我的方法

import { Meteor } from 'meteor/meteor' 
import Dropbox from 'dropbox' 
// import atob from 'atob' 
import FileAPI from 'file-api' 

const { File } = FileAPI 

console.log('dropbox settings', Meteor.settings.dropbox) 
const dbx = new Dropbox({accessToken: Meteor.settings.dropbox.accessToken}) 

Meteor.methods({ 
    'uploadToDropbox': function (base64File) { 
    console.log('base64File', base64File.slice(5)) 
    const b64 = base64File.split(',') 
    const name = `${Math.random().toString(36).slice(-5)}.png` 
    const file = new File({buffer: new Buffer(b64[1]), name, type: 'image/png'}) 
    console.log('file', file) 
    dbx.filesUpload({path: '/' + file.name, contents: file.buffer}) 
     .then(function (response) { 
     console.log(response) 
     }) 
     .catch(function (error) { 
     console.error('dropbox error', error) 
     }) 
    return false 
    } 
}) 

在這裏,我嘗試將base64File轉換回文件對象,並將其上傳到保管箱。 現在,這裏一切似乎都在工作。該文件正在成功上傳到保管箱。但圖像本身是空的。當我從保存箱中下載上傳的圖像並在我的電腦中打開它時,觀衆說這個文件不是png。所以可能我的文件沒有被正確轉換。 那麼如何將base64File轉換回普通文件呢?

回答

1

嘗試這樣的事情

const i = base64File.indexOf('base64,'); 
const buffer = Buffer.from(base64File.slice(i + 7), 'base64'); 
const file = new File({buffer: buffer, name, type: 'image/png'});