2016-06-28 38 views
0

我理解的字节,为了使用多部分上传文件到Amazon S3,说明现在的位置: http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html更换亚马逊S3上传的文件

如何去替换字节(比如,之间上传文件的范围4-1523)?我是否需要利用分段上传来实现这一目标?或者我使用HTTP标头中指定的范围发起REST呼叫?

欣赏任何建议。

+1

分段上传旨在上传大文件(虽然它可以和小文件一起使用)。它不旨在修改文件的“部分”。据我所知,在S3上修改文件的唯一方法是完全重新上传更新的版本。 – Arnauld

回答

1

S3中的对象是不可变的。

如果它是一个小对象,则需要重新上传整个对象。

如果是在尺寸对象超过5MB,则有一种变通方法,可以让你“打补丁”的文件时,使用修改的方法来多上传API。

背景:

如你所知,一个多上传允许你上传的“零件”,以最小的零件尺寸5MB和最大部分的文件数10,000。

但是一多“上传”并不意味着你必须重新“上载”的所有数据,如果部分或全部的它已经在S3存在,你可以解决这个问题。

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

由于上传是原子时,“现有对象”可以是你在改写的过程中是对象,因为它依然安然无恙,并在适当位置,直到你真正完成多载。

但似乎没有使用的复制功能,为你提供想要离开相同的部分数据阻止你,避免实际的上传,然后使用普通PUT part请求来上传你想拥有的部分不同的内容。

所以,虽然不是一个字节范围补丁与粒度为1个八位位组的水平,这可能是用于仿真一个大文件的就地修改是有用的。对于小于50GB的文件,有效“部分”的示例将替换5MB边界上的最小5MB块,或者替换最大5TB的500MB边界上最小500MB块,其中最小部分大小在极端值之间变化,因为要求多部分上传不超过10,000部分。问题在于零件必须以适当的偏移量开始,并且需要更换整个零件。