amazon-web-services - AWS - 使用 S3 TransferManager 生成预签名 URL
问题描述
我正在尝试为我使用 S3 TransferManager 上传到 s3 存储桶的数据对象生成一个预签名的 url。但我收到以下错误
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>mykey</Key>
<RequestId>9BB78BBE144063EA</RequestId>
<HostId>myhostid</HostId>
</Error>
如果我使用 com.amazonaws.services.s3.AmazonS3 上传我的数据对象,我可以成功生成预签名的 url。但是我想使用 TransferManager,因为与 AmazonS3 相比,上传性能要好得多(在我的情况下接近 100 倍)这是给我上述错误的代码
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(region.getName())
.withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
.build();
TransferManager manager = TransferManagerBuilder
.standard()
.withS3Client(s3Client)
.build();
byte[] zippedBytes = compressLayers(layers); //here the compressed json is got
ObjectMetadata metaData = new ObjectMetadata();
metaData.setContentType(CONTENT_TYPE_JSON);
metaData.setContentEncoding(CONTENT_ENCODING_GZIP);
metaData.setContentLength(zippedBytes.length);
manager.upload(bucketName, uuidFileName, new ByteArrayInputStream(zippedBytes), metaData);
java.util.Date expiration = new Date(new Date().getTime()+1000*60*2);
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, uuidFileName)
.withMethod(HttpMethod.GET)
.withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(req);
在上面的代码中,如果我使用 s3Client 上传数据对象,
s3Client.putObject(bucketName, uuidFileName, new ByteArrayInputStream(zippedBytes), metaData);
然后它会正确返回预签名的 url。还有什么方法可以使用 TransferManager 生成预签名的 url?任何帮助将不胜感激。
解决方案
推荐阅读
- javascript - 为什么创建一个新的繁琐的连接会使我的程序无法完成?
- azure - Azure 门户性能测试:从巴西南部生成负载
- powershell - Powershell 命令查找注册表项高级审核设置(权限)
- python - 如何使用 Python 检查非常大的数据集中的重复图片?
- java - 从特定子字符串之后开始的字符串中获取两个双子字符串
- javascript - CSS垂直滑块过渡
- cakephp - Cakephp:encrypt() 的密钥无效,设置 cookie 时密钥必须至少为 256 位(32 字节)长
- postgresql - 循环遍历 Postgresql 中的列
- pandas - 将张量流数据集转换为熊猫数据框
- javascript - 尝试在 JS 中加载 JSON 样式数据