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轉換回普通文件呢?