gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:07:10 26 4
gpt4 key购买 nike

我们正在尝试使用 aws S3 来存储文件。我们在 JAVA 中创建了一个简单的 REST API 来上传和检索文件。

请求更新文件的客户端使用我们的 REST API,它为 PUT/GET 文件提供预先签名的 URL。我们正在使用 AWS SDK for java 生成预签名的 url。

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

最佳答案

我们今天偶然发现了同样的问题,并试图使用

// does not work
request.putCustomRequestHeader(Headers.S3_USER_METADATA_PREFIX + "foo", "bar");

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

最后我们发现使用GeneratePresignedUrlRequest#addRequestParameter出色地完成了工作:

GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest("bucket", "yourFile.ending");
request.addRequestParameter(Headers.S3_USER_METADATA_PREFIX + "foo", "bar");
// import com.amazonaws.services.s3.Headers; needed

预签名的 url 看起来像

https://bucket.s3.region.amazonaws.com/yourFile.ending?x-amz-meta-foo=bar&X-Amz-Security-Token=...

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

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

关于java - AWS S3 添加/设置/更新/指定带有预签名 url 的用户元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37614286/

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