- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要重命名 AWS S3 中的大量对象。对于小对象,以下代码片段可以完美运行:
input := &s3.CopyObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(targetPrefix),
CopySource: aws.String(source),
}
_, err = svc.CopyObject(input)
if err != nil {
panic(errors.Wrap(err, "error copying object"))
}
我遇到了较大对象的 S3 大小限制。我知道我需要使用多部分上传来复制对象。到目前为止,这是我尝试过的:
multiPartUpload, err := svc.CreateMultipartUpload(
&s3.CreateMultipartUploadInput{
Bucket: aws.String(bucket),
Key: aws.String(targetPrefix), // targetPrefix is the new name
},
)
if err != nil {
panic(errors.Wrap(err, "could not create MultiPartUpload"))
}
resp, err := svc.UploadPartCopy(
&s3.UploadPartCopyInput{
UploadId: multiPartUpload.UploadId,
Bucket: aws.String(bucket),
Key: aws.String(targetPrefix),
CopySource: aws.String(source),
PartNumber: aws.Int64(1),
},
)
if err != nil {
panic(errors.Wrap(err, "error copying multipart object"))
}
log.Printf("copied: %v", resp)
golang SDK 帮我解决了问题:
InvalidRequest: The specified copy source is larger than the maximum allowable size for a copy source: 5368709120
我也尝试过以下方法,但我没有在这里列出任何部分:
multiPartUpload, err := svc.CreateMultipartUpload(
&s3.CreateMultipartUploadInput{
Bucket: aws.String(bucket),
Key: aws.String(targetPrefix), // targetPrefix is the new name
},
)
if err != nil {
panic(errors.Wrap(err, "could not create MultiPartUpload"))
}
err = svc.ListPartsPages(
&s3.ListPartsInput{
Bucket: aws.String(bucket), // Required
Key: obj.Key, // Required
UploadId: multiPartUpload.UploadId, // Required
},
// Iterate over all parts in the `CopySource` object
func(parts *s3.ListPartsOutput, lastPage bool) bool {
log.Printf("parts:\n%v\n%v", parts, parts.Parts)
// parts.Parts is an empty slice
for _, part := range parts.Parts {
log.Printf("copying %v part %v", source, part.PartNumber)
resp, err := svc.UploadPartCopy(
&s3.UploadPartCopyInput{
UploadId: multiPartUpload.UploadId,
Bucket: aws.String(bucket),
Key: aws.String(targetPrefix),
CopySource: aws.String(source),
PartNumber: part.PartNumber,
},
)
if err != nil {
panic(errors.Wrap(err, "error copying object"))
}
log.Printf("copied: %v", resp)
}
return true
},
)
if err != nil {
panic(errors.Wrap(err, "something went wrong with ListPartsPages!"))
}
我做错了什么或者我误解了什么?
最佳答案
我认为 ListPartsPages
是错误的方向,因为它适用于“分段上传”,这是不同于 s3“对象”的实体。因此,您将已上传的部分列出到您刚刚创建的分段上传中。
您的第一个示例已接近所需,但您需要手动将原始文件拆分为多个部分,每个部分的范围由 UploadPartCopyInput
的 CopySourceRange
指定.至少这是我阅读文档后的收获。
关于amazon-web-services - 使用 MultiPartUpload 复制 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614668/
我对如何在 AWS PHP SDK 中将简单的 ContentType 元数据添加到 MultiPartUploader 进行了高低搜索。文档特别提到了如何为 PutObject 执行此操作,但没有提
我需要重命名 AWS S3 中的大量对象。对于小对象,以下代码片段可以完美运行: input := &s3.CopyObjectInput{ Bucket: aws.String(bu
我想在 S3 上上传大文件。我知道有一个分段上传选项,我可以通过它分段上传大文件。我阅读了文档 ( http://docs.aws.amazon.com/mobile/sdkforios/develo
我正在尝试使用 S3 MultipartUpload 来连接 S3 存储桶中的文件。如果您有多个大于 5MB 的文件(最后一个文件可以更小),您可以在 S3 中将它们连接成一个更大的文件。它基本上等同
我是一名优秀的程序员,十分优秀!