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



我使用JClouds 1.6.2编写了一个应用程序,并有类似的文件上传代码

java.io.File file = ...
blobStore.putBlob(containerName,
blobStore.blobBuilder(name)
.payload(file)
.calculateMD5()
.build()
);

这非常有效。

现在,在jclouds 1.7中,BlobStore.caculateMD5()已被弃用。此外,即使手动计算MD5哈希(使用guava哈希)并使用BlobStore.contentMD5()传递,我也会得到以下错误:

java.lang.IllegalArgumentException: contentLength must be set, streaming not supported

很明显,我还必须设置内容长度。

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

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

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

ByteSource byteSource = Files.asByteSource(new File(...));
Blob blob = blobStore.blobBuilder(name)
.payload(byteSource)
.contentLength(byteSource.size())
.contentMD5(byteSource.hash(Hashing.md5()).asBytes())
.build();
blobStore.putBlob(containerName, blob);

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

最新更新