2014-02-28 85 views
2

,当我写使用JClouds 1.6.2应用程序并且有文件上传代码像JClouds S3:上传文件

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

这工作得很好指定内容长度。

现在,在jclouds 1.7中,不推荐使用BlobStore.calculateMD5()。此外,即使手动计算MD5哈希值(使用散列番石榴),并与BlobStore.contentMD5通过它(),我得到以下错误:

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

所以,很显然,我还可以设置内容长度。

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

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

回答

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做出这些改变,以消除重复番石榴功能,并提出一些某些操作的成本,例如中,哈希,更明显。