【发布时间】:2017-01-22 05:10:52
【问题描述】:
我正在使用 ng-file-upload 将 JPG 文件上传到我的 S3 存储桶。
file.upload = Upload.upload({
url: "https://<my-bucket-name>.s3.amazonaws.com/",
method: "POST",
data: {
key: "custom-filename.jpg",
AWSAccessKeyId: "<AWSAccessKeyId>",
acl: "public-read",
policy: <policy>,
signature: <signature>,
"Content-Type": "image/jpeg",
filename: file.name,
file: file,
Metadata: {
"x-amz-meta-hello": "Custom Metadata Value"
}
}
});
我也尝试了以下(在上面的代码中)
Metadata: {
hello: "Custom Metadata Value"
}
&简单
"x-amz-meta-hello": "Custom Metadata Value"
我已将自定义元数据包含在我的策略文件中
["starts-with", "x-amz-meta-hello", ""]
另外,S3 上 Bucket Permissions 下的 CORS 配置是
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-meta-hello</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
以上代码和设置正常,JPG文件上传成功,但不知何故自定义元数据值没有设置。
成功上传后,我正在调用 Lambda 函数来调整 JPG 的大小并将其存储在单独的存储桶中。即使这部分工作正常,但我无法在我的 Lambda 函数中读取自定义元数据 (x-amz-meta-hello) 值。我需要该值来为上传的文件分配一个单独的文件夹。
在我的 Lambda 函数中读取自定义元数据
var s3 = new AWS.S3();
s3.headObject({
Bucket: <BucketName>,
Key: <S3ObjectKey>
}, function(err, data) {
if (err) {
console.log(err);
}
else
{
console.log(data);
}
});
不确定我在这里遗漏了什么......请告知。
谢谢。 (AngularJS 版本 1.5.0,ng-file-upload 版本 12.2.9,Google Chrome 版本 53.0.2785.113 on OSX 10.10.5)
【问题讨论】:
-
严格按照直觉:消除
Metadata: {和}构造,并将元数据键放在文件信息上方:... "Content-Type": "image/jpeg", "x-amz-meta-hello": "Custom Metadata Value", filename: file.name, ... -
谢谢...完美运行...