Amazon s3 JClouds S3:上传文件时指定内容长度

Amazon s3 JClouds S3:上传文件时指定内容长度,amazon-s3,jclouds,http-content-length,Amazon S3,Jclouds,Http Content Length,我使用JClouds1.6.2编写了一个应用程序,并有如下文件上传代码 java.io.File file = ... blobStore.putBlob(containerName, blobStore.blobBuilder(name) .payload(file) .calculateMD5() .build() ); 这非常有效 现在,在JClouds1.7中,BlobStore.calculateMD5()已被弃用。此外,即使手动计算MD5哈希(使用g

我使用JClouds1.6.2编写了一个应用程序,并有如下文件上传代码

java.io.File file = ...
blobStore.putBlob(containerName,
    blobStore.blobBuilder(name)
    .payload(file)
    .calculateMD5()
    .build()
);
这非常有效

现在,在JClouds1.7中,BlobStore.calculateMD5()已被弃用。此外,即使手动计算MD5哈希(使用guava哈希)并将其与BlobStore.contentMD5()一起传递,我也会得到以下错误:

java.lang.IllegalArgumentException: contentLength must be set, streaming not supported
显然,我还需要设置内容长度

计算正确内容长度的最简单方法是什么


事实上,我不认为jclouds突然取消了对特性的支持,使得上传文件变得更加困难。有没有办法让jclouds计算MD5和/或内容长度?

您应该使用ByteSource,它提供了几种帮助方法:

ByteSource ByteSource=Files.asByteSource(新文件(…);
Blob Blob=blobStore.blobBuilder(名称)
.有效负载(字节源)
.contentLength(byteSource.size())
.contentMD5(byteSource.hash(Hashing.md5()).asBytes())
.build();
blobStore.putBlob(容器名称,blob);

jclouds进行了这些更改,以删除Guava复制的功能,并使某些操作(例如哈希)的成本更加明显。

您应该使用ByteSource,它提供了几种辅助方法:

ByteSource ByteSource=Files.asByteSource(新文件(…);
Blob Blob=blobStore.blobBuilder(名称)
.有效负载(字节源)
.contentLength(byteSource.size())
.contentMD5(byteSource.hash(Hashing.md5()).asBytes())
.build();
blobStore.putBlob(容器名称,blob);
jclouds进行了这些更改,以删除Guava复制的功能,并使一些操作(例如哈希)的成本更加明显