huaweicloud / huaweicloud-sdk-java-obs

The OBS SDK for Java, which is used for accessing Object Storage Service
Other
133 stars 116 forks source link

分段方式上传的文件,使用ObjectMetadata.getContentMd5获取不到md5值 #93

Open ordie opened 2 years ago

ordie commented 2 years ago

在分段上传初始化时,设置对象的md5值: InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectId); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentMd5("j04z89w+QU/5Tl+2kFy6jA=="); request.setMetadata(metadata); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);

上传完成后,用以下代码获取的content md5是null: ObjectMetadata metadata = obsClient.getObjectMetadata(bucketName, objectName); System.out.println("\nmetadata.getContentMd5(): " + metadata.getContentMd5()); 打印结果为: metadata.getContentMd5(): null

我也尝试过分段上传的时候,用addUserMetadata来设置用户元数据: InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectId); request.addUserMetadata(“hash_code”, "b6d81b360a5672d80c27430f39153e2c"); InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);

上传完成后依然无法获取到: ObjectMetadata metadata = obsClient.getObjectMetadata(bucketName, objectName); System.out.println("\nmetadata.getUserMetadata(): " +metadata.getUserMetadata("hash_code")); 打印结果为: metadata.getUserMetadata(): null

不知道在分段上传的情况下,SDK是如何处理content md5的。我尝试在InitiateMultipartUploadRequest 设置一个不正确 的md5值,也能够上传成功。

如果不是分段上传方式,或者对于已经上传到华为云上的文件,setContentMd5和addUserMetadata两种方式都能正常工作, 都可以获取到希望的md5值。

noaccident commented 10 months ago

分段上传计算的md5值是在上传段进行的,合并段服务端暂时不支持效验md5。