【发布时间】:2014-08-05 09:19:09
【问题描述】:
我正在使用 Meteor.js 和 Amazon S3 Bucket 来上传和存储照片。我正在使用陨石包 collectionFS 和 aws-s3。我已经正确设置了我的 aws-s3 连接,并且图像收集工作正常。
客户端事件处理程序:
'click .submit': function(evt, templ) {
var user = Meteor.user();
var photoFile = $('#photoInput').get(0).files[0];
if(photoFile){
var readPhoto = new FileReader();
readPhoto.onload = function(event) {
photodata = event.target.result;
console.log("calling method");
Meteor.call('uploadPhoto', photodata, user);
};
}
还有我的服务器端方法:
'uploadPhoto': function uploadPhoto(photodata, user) {
var tag = Random.id([10] + "jpg");
var photoObj = new FS.File({name: tag});
photoObj.attachData(photodata);
console.log("s3 method called");
Images.insert(photoObj, function (err, fileObj) {
if(err){
console.log(err, err.stack)
}else{
console.log(fileObj._id);
}
});
选择的文件是 .jpg 图像文件,但在上传时我在服务器方法上收到此错误:
调用方法 'uploadPhoto' 时出现异常错误:DataMan 构造函数接收到它不支持的数据
无论我是直接传递图像文件,还是将其作为数据附加或使用fileReader读取为文本/二进制/字符串。我仍然得到那个错误。请指教。
【问题讨论】:
-
您是否有理由不想在客户端进行插入?
-
也许这是错误的方法 - 但要确保我的 AWS 凭证(密钥 + 机密)安全,而不是将其提供给客户端。在允许上传到存储桶之前,还希望在服务器端对数据进行某些验证。
标签: amazon-web-services amazon-s3 meteor