Java-AWS S3使用预先签名的URL添加/设置/更新/指定用户元数据
作者:互联网
我们正在尝试使用AWS S3存储文件.我们在JAVA中创建了一个简单的REST API,以上传和检索文件.
要求更新文件的客户使用我们的REST API,该API提供一个预签名的URL来PUT / GET文件.我们正在使用适用于Java的AWS开发工具包来生成预签名的URL.
在S3上更新文件时,我们需要向文件中添加一些自定义元数据.由于我们不控制上传到S3本身,因此有什么方法可以在生成预签名的url时添加此信息?让客户端将这些信息作为其请求标头的一部分提供,这将是不好的.
解决方法:
我们今天偶然发现了同一问题,并试图使用
// does not work
request.putCustomRequestHeader(Headers.S3_USER_METADATA_PREFIX + "foo", "bar");
不幸的是,这确实无法正常工作,它添加了元数据,但是预签名url的调用者仍必须使用请求标头提供元数据,而客户端则不必这样做.
最终,我们发现使用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
预签名的网址看起来像
https://bucket.s3.region.amazonaws.com/yourFile.ending?x-amz-meta-foo=bar&X-Amz-Security-Token=...
可以在url中清楚地看到元数据,使用正文中的upload-file使用Postman将其放置到该文件中,然后在存储桶中创建具有正确元数据的文件.
唯一不那么漂亮的部分是必须为用户元数据指定内部aws标头前缀.
标签:amazon-s3,metadata,aws-sdk,pre-signed-url,java 来源: https://codeday.me/bug/20191118/2029191.html