当前位置: 首页 > 知识库问答 >
问题:

如何检查我上传的文件是否为“多部分”?

金令
2023-03-14

来自文档:“当您使用传输管理器下载文件时,实用程序会自动确定对象是否为多部分”

来源:https://AWS . Amazon . com/fr/blogs/developer/parallelizing-large-downloads-for-optimal-speed/

这意味着某处有指标(元数据?属性?)可以告诉你一个文件是否是多部分的。所以在用java SDK测试之前,我正在用AWS CLI测试AWS Rest API,我专注于多部分上传/下载(根据文档,只有当上传是多部分时,下载才是多部分的)。

首先,我将阈值明确设置为5MB:

$ aws configure set default.s3.multipart_threshold 5MB

我上传一个20 MB的文件:

$ aws s3 cp ./my-file s3://my-bucket/test/multipart-upload-1

它需要45秒,当我在上传过程中检查时:

$ aws s3api list-multipart-uploads --bucket my-bucket

我可以看到我的上传是列表的一部分,但我只看到一个下载,没有关于“部件”或连接数量的信息。

如果我将阈值设置为50MB(远远超过文件大小),上传速度会快得多(超过10秒),并且在上传过程中,我无法使用以下命令查看上传

$ aws s3api list-multipart-uploads --bucket my-bucket

因此,它倾向于显示第一次上传被识别为“分段”上传,但我没有关于分段数量的信息,并且在上传后我无法区分分段上传的文件和简单的上传文件。

共有2个答案

楚俊逸
2023-03-14

要了解对象是否是多部分,可以检查 ETag

对于非多部分对象,Etag 看起来像 0a3dbf3a768081d785c20b498b4abd24

对于多部分的,Etag看起来像ceb8853ddc5086cc4ab9e149f8f09c88-2

您可以使用-字符区分它们。

使用AWS CLI,您可以使用以下命令恢复对象的Etag:

aws s3api head-object --bucket <bucket> --key <object_key> | grep ET
ag

使用boto3,您可以像这样恢复Etag:

from boto3 import client
s3 = client('s3')
print(s3.head_object(Bucket=<bucket>, Key=<object_key>)['ETag'])

姜乐家
2023-03-14

通过查看ETAG,您可以很容易地判断对象是否是多部分的。如果ETAG超过32个字符,并且在末尾包含-#,那么您就知道它是一个多部分请求。ETag末尾的#表示对象中的部件数。

我不确定这是否在任何地方都有具体的记录,但是它已经使用此方法在其他堆栈溢出问题中成功分解:

对于大于5GB的文件,计算Amazon-S3 Etag的算法是什么?

 类似资料:
  • 问题内容: 如何检查用户上传的文件在Python(Google App Engine)中是否为真实的jpg文件? 这是我现在所走的距离: 脚本通过HTML Form Post接收图像,并由以下代码处理 我找到了mimetypes.guess_type,但是它对我不起作用。 问题答案: 如果您需要的不仅仅是扩展名,一种方法是读取JPEG标头,并检查其是否与有效数据匹配。格式为: 因此快速识别器将是:

  • 我们使用apache文件上传来上传文件,下面的代码也是一样。 但我们最近转向了Spring boot,并尝试使用spring multipart上传文件。替换上述代码的代码将是 但是我无法弄清楚如何检查该文件是否有一个表单字段在Springboot.Inapache文件上传它是使用方法实现的。

  • 如果我尝试推送一个大文件(任何超过1MB大小的文件),我的代码最初会被破坏。它现在工作正常,可以通过在属性文件中添加以下内容来适应我想要的文件大小。 但是我如何写一个适当的单元/集成测试,以确保它允许文件大小高达10MB? 下面有一个很好的测试示例(可接受的答案),但它使用模拟文件设置进行测试。使用SpringMVC测试单元测试多部分POST请求 有没有办法模拟并指定文件大小 这是要测试的方法 这

  • 问题内容: 我用Java编写了一个简短的测试代码,以上传内存中生成的PDF文件。在此测试代码中,我仅使用一个虚拟字节数组,但在实际使用中,我将在该字节数组中放置生成的PDF(最多2-3页)。一切正常:上传文件并设置权限。 但是,由于返回了PutObjectResult,所以我想知道应该如何检查它。还是足以找到AmazonClientException和AmazonServiceException异

  • 问题内容: 我想检查上传的文件是图像文件(例如png,jpg,jpeg,gif,bmp)还是其他文件。问题是,无论您上传哪种文件类型,我都使用Uploadify上传文件,这会更改mime类型并给出“文本/八进制”或类似的mime类型。 除了使用PHP检查文件扩展名之外,是否有其他方法可以检查上传的文件是否为图像? 问题答案: 您可以使用非图像尺寸返回零。

  • 问题内容: 我正在使用JAI并使用以下文件创建文件: 我在该行之前检查文件是否存在。但是,如何检查文件是.bmp还是.tiff还是图像文件? 有人知道吗? 问题答案: Image Magick项目具有识别图像的功能,并且有一个用于Image Magick的Java包装器,称为JMagick,我认为您可能需要考虑而不是重新发明轮子: http://www.jmagick.org 我一直在使用Imag