最近,由于两个原因,我无法使用s3.copyObject(sourceBucket, sourceKey, destBucket, destKey);
复制文件。
1)源和目标存储桶位于2个不同的区域(在我的情况下,us-east-1和us-east2)。
2)服务器所在的区域位于启用了S3端点的VPC中。 S3端点是S3的内部连接,但仅在同一区域
鉴于我们正在移动大文件,我们无法下载,甚至暂时上传。我们还希望保留S3端点,因为应用程序会在区域中严重使用S3资产。
答案 0 :(得分:0)
解决方案是将文件从一个流流式传输到另一个流。我写了这个简单的函数来处理它。
ZipException只是一个自定义异常。扔任何你想要的东西。
希望这有助于某人。
public static void copyObject(AmazonS3 sourceClient, AmazonS3 destClient, String sourceBucket, String sourceKey, String destBucket, String destKey) throws IOException {
S3ObjectInputStream inStream = null;
try {
GetObjectRequest request = new GetObjectRequest(sourceBucket, sourceKey);
S3Object object = sourceClient.getObject(request);
inStream = object.getObjectContent();
destClient.putObject(destBucket,
destKey, inStream, object.getObjectMetadata());
} catch (SdkClientException e) {
throw new ZipException("Unable to copy file.", e);
} finally {
if (inStream != null) {
inStream.close();
}
}
}