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

Java 如何检查我上传的文件是否为;“多部分”;还是不?,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,在文档中:“当您使用TransferManager下载文件时,实用程序会自动确定对象是否为多部分” 资料来源: 这意味着某个地方有一些指示符(元数据?属性?),可以告诉您文件是否为“多部分”。因此,在使用java SDK进行测试之前,我正在使用AWS CLI测试AWS Rest API,我将重点关注多部分上传/下载(根据文档,只有在上传是多部分的情况下,下载才会是多部分的) 首先,我明确地将阈值设置为5MB: $ aws configure set default.s3.multipart_th

在文档中:“当您使用TransferManager下载文件时,实用程序会自动确定对象是否为多部分”

资料来源:

这意味着某个地方有一些指示符(元数据?属性?),可以告诉您文件是否为“多部分”。因此,在使用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(远远超过文件大小),则上载速度会快得多(超过10s),并且在上载过程中,我无法通过以下方式查看上载:

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

因此,它倾向于告诉我第一次上传被认为是“多部分”上传,但我没有关于部分数量的信息,上传后我无法区分多部分上传的文件和简单上传的文件。

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

我不确定是否在任何地方明确记录了这一点,但是使用这种方法,它已成功地分解为其他堆栈溢出问题: