首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWS S3添加/设置/更新/指定带有预签名url的用户元数据

AWS S3添加/设置/更新/指定带有预签名url的用户元数据
EN

Stack Overflow用户
提问于 2016-06-03 20:21:45
回答 1查看 4.1K关注 0票数 3

我们正在尝试使用亚马逊网络服务S3来存储文件。我们用JAVA创建了一个简单的REST API来上传和检索文件。

请求更新文件的客户端使用我们的REST API,它提供了一个预先签名的url来上传/获取文件。我们使用AWS SDK for java来生成预签名的urls。

当文件在S3上更新时,我们需要向文件中添加一些自定义元数据。由于我们无法控制上传到S3本身,有没有一种方法可以在生成预签名url的同时添加此信息?让客户端将此信息作为其请求标头的一部分提供是不好的。

EN

回答 1

Stack Overflow用户

发布于 2017-08-29 23:36:26

我们今天碰巧遇到了同样的问题,并试图使用

代码语言:javascript
运行
复制
// does not work
request.putCustomRequestHeader(Headers.S3_USER_METADATA_PREFIX + "foo", "bar");

不幸的是,这并不能真正起作用,它添加元数据,但是预签名url的调用者仍然必须使用请求报头来提供元数据,这是客户端不应该做的事情。

最后,我们发现使用GeneratePresignedUrlRequest#addRequestParameter可以很好地完成这项工作:

代码语言:javascript
运行
复制
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest("bucket", "yourFile.ending");
request.addRequestParameter(Headers.S3_USER_METADATA_PREFIX + "foo", "bar"); 
// import com.amazonaws.services.s3.Headers; needed

然后,预签名的url如下所示:

代码语言:javascript
运行
复制
https://bucket.s3.region.amazonaws.com/yourFile.ending?x-amz-meta-foo=bar&X-Amz-Security-Token=...

可以在url中清楚地看到元数据,在主体中使用upload-file使用Postman来PUT到该文件,从而在桶中创建具有正确元数据的文件,并且客户端不可能改变元数据,因为这将使签名不再与请求匹配。

唯一不太好的地方是必须为用户元数据指定内部aws头前缀。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37614286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档