C# AWS S3如何将文件从一个存储桶移动到不同区域的另一个存储桶

C# AWS S3如何将文件从一个存储桶移动到不同区域的另一个存储桶,c#,amazon-s3,C#,Amazon S3,我在不同的地区有两个水桶,B1在亚太地区2(悉尼),另一个(B2)在美国西部1(美国西部(北加利福尼亚))。 我正在尝试使用AWS S3 SDK(.NET)将一些文件从B1移动到B2,但我似乎看不到一种简单的方法 以下是我的示例代码: var sydneyClient = new AmazonS3Client("accessKeyID", "secretKey", RegionEndpoint.APSoutheast2) var fileInfo = new S3FileInfo(sydney

我在不同的地区有两个水桶,B1在亚太地区2(悉尼),另一个(B2)在美国西部1(美国西部(北加利福尼亚))。 我正在尝试使用AWS S3 SDK(.NET)将一些文件从B1移动到B2,但我似乎看不到一种简单的方法

以下是我的示例代码:

var sydneyClient = new AmazonS3Client("accessKeyID", "secretKey", 
RegionEndpoint.APSoutheast2)
var fileInfo = new S3FileInfo(sydneyClient, "b1", "filePath");
if (!fi.Exists)
{
    return;
}
fileInfo.MoveTo("b2", "filePath");
这给了我以下错误:

Amazon.S3.AmazonS3Exception: 'Error making request with Error Code 
MovedPermanently and Http Status Code MovedPermanently. No further error 
information was returned by the service.'
我认为这是因为b2位于不同的区域,当我这样做时:

var listAllRequest = new ListObjectsRequest();
listAllRequest.BucketName = "b2";
var listAllResponse = sydneyClient.ListObjects(listAllRequest);
我明白了:

The bucket you are attempting to access must be addressed using the specified 
endpoint. Please send all future requests to this endpoint
我知道我的“sydneyClient”无法访问在美国创建的另一个bucket是有道理的,因为我在创建它时将该区域指定为“RegionEndpoint.APSoutheast2”,并且根据AWS文档,每个区域都是独立的

如果我尝试将文件从b1移动到APSoutheast2中的另一个存储桶中,那么效果很好

我知道我可以将文件从b1下载到本地存储,为b2创建另一个AmazonS3Client,然后进行上传。 但是,在这种情况下,有没有一种简单的方法可以将文件从b1移动到另一个区域的存储桶

谢谢,Amazon S3没有“移动”命令。相反,您应该使用,指定:

public virtual CopyObjectResponse CopyObject(
         String sourceBucket,
         String sourceKey,
         String destinationBucket,
         String destinationKey
)
然后,删除原始对象


这在桶之间和区域之间都起作用。将请求发送到目标区域(即目标存储桶所在的区域)。

您可以直接使用AWS管理门户进行配置,而无需更改任何代码

此功能称为S3跨区域复制(简称CRR)


他们有一个。

CRR不会复制现有对象。谢谢,但这不是我真正想要实现的。约翰·罗滕斯坦提供了我想要的解决方案。不过还是要谢谢你。谢谢。这解决了我的问题。“将请求发送到目标区域”是关键,我使用源S3客户机进行了尝试,但失败了。