我使用JClouds 1.6.2编写了一个应用程序,并且有像
这样的文件上传代码java.io.File file = ...
blobStore.putBlob(containerName,
blobStore.blobBuilder(name)
.payload(file)
.calculateMD5()
.build()
);
这非常有效。
现在,在jclouds 1.7中,不推荐使用BlobStore.calculateMD5()。此外,即使手动计算MD5哈希值(使用guava Hashing)并使用BlobStore.contentMD5()传递它,我也会收到以下错误:
java.lang.IllegalArgumentException: contentLength must be set, streaming not supported
很明显,我还必须设置内容长度。
计算正确内容长度的最简单方法是什么?
实际上我不认为,jclouds突然删除了对功能的支持,并使上传文件变得更加困难。有没有办法让jclouds计算MD5和/或内容长度?
答案 0 :(得分:4)
你应该使用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复制的功能,并使某些操作(例如散列)的一些成本更加明显。