Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 将未压缩的本地文件与存储在AmazonS3上的压缩文件进行比较?_Amazon S3_Md5_Boto - Fatal编程技术网

Amazon s3 将未压缩的本地文件与存储在AmazonS3上的压缩文件进行比较?

Amazon s3 将未压缩的本地文件与存储在AmazonS3上的压缩文件进行比较?,amazon-s3,md5,boto,Amazon S3,Md5,Boto,我们在AmazonS3上放置了数百个图像文件,用户需要将这些文件同步到本地目录。为了节省存储空间和带宽,我们压缩存储在S3上的文件 在用户端,他们有一个python脚本,每5分钟运行一次,以获取当前文件列表,并下载新的/更新的文件 我的问题是,确定哪些内容是新的或更改为下载的最好方法是什么 目前,我们在压缩文件中添加了一个额外的头文件,其中包含未压缩文件的MD5值 我们从这样一个文件开始: image_file_1.tif 17MB MD5 = xxxx1234 我们压缩它(使用7z

我们在AmazonS3上放置了数百个图像文件,用户需要将这些文件同步到本地目录。为了节省存储空间和带宽,我们压缩存储在S3上的文件

在用户端,他们有一个python脚本,每5分钟运行一次,以获取当前文件列表,并下载新的/更新的文件

我的问题是,确定哪些内容是新的或更改为下载的最好方法是什么

目前,我们在压缩文件中添加了一个额外的头文件,其中包含未压缩文件的MD5值

我们从这样一个文件开始:

image_file_1.tif   17MB    MD5 = xxxx1234
我们压缩它(使用7zip)并将其放入S3(使用Python/Boto):

问题是我们无法从S3中获得一个包含x-amz-meta-uncompressedmd5头文件的大列表,而每个文件都没有额外的API(对于成百上千个文件来说速度很慢)

我们最实用的解决方案是让用户获得完整的文件列表(没有额外的标题),下载本地不存在的文件。如果它确实存在于本地,则执行和其他API调用以获取完整的头文件,从而将本地MD5校验和与x-amz-meta-uncompressedmd5进行比较


我想一定有更好的方法。

您可以将未压缩图像的MD5哈希值包含到压缩文件名中

所以image_file_1.tif可以变成image_file_1.xx1234.tif.z

因此,执行同步的用户python文件将具有确定是否需要再次从S3获取该文件所需的信息,并且可以删除文件名的MD5部分,也可以维护它,具体取决于您想要执行的操作


或者,您也可以在S3上维护包含完整文件列表(包括MD5元数据)的单个文件。因此,python脚本只需要获取单个文件,对其进行解析,然后决定要做什么。

为了不弄乱文件名,您可以创建另一个包含MD5内容的文件,如image_file_1.tif.MD5。
image_file_1.tif.z  9MB    MD5 = yyy3456    x-amz-meta-uncompressedmd5 = xxxx1234