替换Amazon S3中上载文件的字节

时间:2016-06-28 07:39:44

标签: amazon-s3 amazon

我理解为了使用Multipart将文件上传到Amazon S3,说明如下: http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html

如何更换上传文件的字节(例如,范围4-1523之间)?我是否需要使用Multipart Upload来实现这一目标?或者使用HTTP标头中指定的范围激活REST调用?

感谢任何建议。

2 个答案:

答案 0 :(得分:2)

S3中的对象是不可变的。

如果它是一个小物件,你需要再次上传整个物体。

如果它是一个超过5MB的对象,那么有一种解决方法允许您使用修改后的多部分上传API方法“修补”文件。

背景:

如您所知,分段上传允许您以“部件”上传文件,最小部件尺寸为5MB,最大部件数为10,000。

然而,多部分“上传”并不意味着您必须再次“上传”所有数据,如果S3中已存在部分或全部数据,您可以解决它。

PUT part/copy允许您通过在现有对象中指定八位字节范围来“上传”各个部分。或者不止一个对象。

由于上传是原子的,因此“现有对象”可以是您正在覆盖的对象,因为它在您实际完成分段上传之前一直没有受到伤害。

但似乎没有什么能阻止您使用复制功能为您想要保留的部分提供数据,避免实际上传,然后使用正常的PUT part请求上传您的部分想拥有不同的内容。

因此,虽然不是粒度为1个八位字节的字节范围补丁,但这对于模拟大文件的就地修改非常有用。对于小于50GB的文件,有效“部件”的示例将替换5MB边界上的最小5 MB块,或者对于高达5TB的对象,替换500MB边界上的最小500MB块,最小部件大小在极端值之间变化,因为要求分段上传不超过10,000个部分。问题是零件必须以适当的偏移量开始,您需要更换整个零件。

答案 1 :(得分:0)

在问题的背景上,迈克尔的回答颇具解释性。如果您想知道的话,只需添加要执行的实际步骤即可。

  1. 使用ListParts
  2. 列出对象部分
  3. 确定已修改的部分
  4. 开始分段上传
  5. 使用UploadPartCopy
  6. 复制未更改的部分
  7. 上传修改后的零件
  8. 完成上传以保存修改

如果您已经知道必须更改哪个部分,请跳过2。

提示:每个部分都有一个ETag,它是指定部分的MD5哈希。这可以用来验证特定部分是否已更改。

相关问题