我正在使用yeoman angular fullstack,我试图做一个简单的文件上传。我从一个表单中读取文件,然后将它放到前端就好了
this.$scope.add = function() {
var f = document.getElementById('resume').files[0];
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
console.log(e.target.result);
Auth.saveResume({
data: e.target.result,
name:theFile.name
});
};
})(f);
reader.readAsArrayBuffer(f);
}
在auth.services.ts中我有
saveResume(resume, callback?: Function) {
console.log(User)
return User.saveResume({ id: currentUser._id }, {resume},
function() {
console.log('auth.service in function');
console.log('currentUser._id: ' + currentUser._id);
return safeCb(callback)(null);
},
function(err) {
return safeCb(callback)(err);
}).$promise;
},
它成功进入我的后端控制器
router.put('/:id/resume', auth.isAuthenticated(), controller.saveResume);
我有一个saveResume函数
export function saveResume(req, res){
console.log(typeof req.body.resume.data);
console.log(typeof req.body.resume.name);
}
在保存恢复功能中,当我访问" name"参数是正确的,是字符串类型。但是,当我访问"数据"我只是得到一个对象。我希望数据可以是文件或缓冲区,因此我可以将其上传到s3。
我唯一猜测为什么它的对象而不是ArrayBuffer是我认为节点不支持javascript ArrayBuffers,blob或文件。如何以s3接受的某种形式获取后端文件?即文件,blob或缓冲区
答案 0 :(得分:0)
正如@bubblez建议我将它编码为基础64,如此
var fileReader = new FileReader();
var base64;
// Onload of file read the file content
fileReader.onload = function(fileLoadedEvent) {
base64 = fileLoadedEvent.target.result;
// Print data in console
console.log(base64);
Auth.saveResume(f.name, base64);
};
// Convert data to base64
fileReader.readAsDataURL(f);
我也改变了auth,因此它需要两个独立的参数
saveResume(name, data, callback?: Function) {
console.log(User)
return User.saveResume({ id: currentUser._id }, {name, data},
function() {
console.log('auth.service in function');
console.log('currentUser._id: ' + currentUser._id);
return safeCb(callback)(null);
},
function(err) {
return safeCb(callback)(err);
}).$promise;
},
然后我从base 64解码
export function saveResume(req, res){
var base64String = req.body.data.split(';base64,').pop();
console.log(base64String);
var buf = Buffer.from(base64String, 'base64').toString('utf');
uploadParams.Body = buf;
}
这有效!