我正在尝试使用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? 任何帮助将不胜感激。