gpt4 book ai didi

amazon-s3 - 如何使用 meteor 将图像从 FileReader 上传到 Amazon s3

转载 作者:行者123 更新时间:2023-12-04 08:09:47 24 4
gpt4 key购买 nike

我正在尝试使用 meteor 构建一个图像上传器到 Amazon S3。感谢 Hubert OG,我找到了 AWS-SDK这使事情变得容易。

我的问题是上传的数据似乎已损坏。当我下载它说的文件时,该文件可能已损坏。大概是吧。

将数据插入图像 src 确实有效,并且图像的预览会按预期显示,因此原始文件和数据可能是正确的。

我正在使用 FileReader 加载文件,然后将结果数据传递给 AWS-SDK putObject 方法。

        var file=template.find('[type=file]').files[0];
var key="uploads/"+file.name;

var reader=new FileReader();
reader.onload=function(event){
var data=event.target.result;
template.find('img').src=data;
Meteor.call("upload_to_s3",file,"uploads",reader.result);
};

reader.readAsDataURL(file);

这是服务器上的方法:
    "upload_to_s3":function(file,folder,data){
s3 = new AWS.S3({endpoint:ep});
s3.putObject(
{
Bucket: "myportfoliositebucket",
ACL:'public-read',
Key: folder+"/"+file.name,
ContentType: file.type,
Body:data
},
function(err, data) {
if(err){
console.log('upload error:',err);
}else{
console.log('upload was succesfull',data);
}
}
);
}

最佳答案

我将一个 npm 模块包装为一个智能包,在这里可以找到:https://atmosphere.meteor.com/package/s3policies

有了它,您可以创建一个返回写入策略的 Meteor 方法,并使用该策略,您可以使用 ajax 调用上传到 S3。

例子:

Meteor.call('s3Upload', name, function (error, policy) {
if(error)
onFinished({error: error});
var formData = new FormData();
formData.append("AWSAccessKeyId", policy.s3Key);
formData.append("policy", policy.s3PolicyBase64);
formData.append("signature", policy.s3Signature);

formData.append("key", policy.key);
formData.append("Content-Type", policy.mimeType);
formData.append("acl", "private");
formData.append("file", file);

$.ajax({
url: 'https://s3.amazonaws.com/' + policy.bucket + '/',
type: 'POST',
xhr: function() { // custom xhr
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener('progress',
function (e){
if(e.lengthComputable)
onProgressUpdate(e.loaded / e.total * 100);

}, false); // for handling the progress of the upload
}
return myXhr;
},
success: function () {
// file finished uploading
},
error: function () { onFinished({error: arguments[1]}); },
processData: false,
contentType: false,
// Form data
data: formData,
cache: false,
xhrFields: { withCredentials: true },
dataType: 'xml'
});
});

编辑:

行中的"file"变量: formData.append("file", file);来自与此类似的行: var file = document.getElementById('fileUpload').files[0];
服务器端代码如下所示:
Meteor.methods({
s3Upload: function (name) {
var myS3 = new s3Policies('my key', 'my secret key');

var location = Meteor.userId() + '/' + moment().format('MMM DD YYYY').replace(/\s+/g, '_') + '/' + name;
if(Meteor.userId()) {
var bucket = 'my bucket';
var policy = myS3.writePolicy(location, bucket, 10, 4096);
policy.key = location;
policy.bucket = bucket;
policy.mimeType = mime.lookup(name);
return policy;
}
}
});

关于amazon-s3 - 如何使用 meteor 将图像从 FileReader 上传到 Amazon s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19593313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com