meteorNodeJs 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转换回文件对象,并将其上传到Dropbox。 现在这里一切似乎都在工作。 该文件正在成功上传到保pipe箱。 但是图像本身是空的。 当我从保存箱中下载上传的图像并在我的电脑中打开它时,查看者说这个文件不是png。 所以可能我的文件没有正确转换。 那么如何将base64File转换回普通文件呢?

尝试这样的事情

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