拐了十八弯,通过 oss 的跨区域复制功能解决了。
当前 oss bucket cnblogs-bucket-a 在华东1(杭州)区域,在 华东2(上海)创建 oss bucket cnblogs-bucket-b ,在 cnblogs-bucket-a 的 oss 控制台 冗余与容错 -> 跨区域复制 中开启同步,同步到 cnblogs-bucket-b ,历史文件90分钟之后才会启动同步,同步等待时间较长。
cnblogs-bucket-a -> cnblogs-bucket-b 的同步完成后, 在 cnblogs-bucket-b 的 oss 控制台继续开启同步,同步到华东1(杭州)区域的最终目标 cnblogs-bucket-c ,完成。
授权新OSS的BucketName的AccessKeyID可以访问操作原先旧的OSS的BucketName,具体如下:
//创建oss客户端
var ossClient = new OssClient(ossConfig.EndPoint, ossConfig.AccessId, ossConfig.Accesskey);
var metadata = new ObjectMetadata { ContentDisposition = "attachment" };
var req = new CopyObjectRequest(ossConfig.BucketName, sourceObject, targetBucket, targetObject)
{
// 如果NewObjectMetadata为null则为COPY模式(即拷贝源文件的元信息),非null则为REPLACE模式(覆盖源文件的元信息)。
NewObjectMetadata = metadata
};
// 拷贝文件。
ossClient.CopyObject(req);
看看这个https://developer.aliyun.com/ask/2220?spm=a2c6h.13159741
阿里云有复制单个oss对象的API, 复制整个bucket好像还真没有。
最好提工单给阿里,让他们给解决方案。