2

我使用 JClouds 1.6.2 编写了一个应用程序,并且文件上传代码如下

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

1 回答 1

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 重复的功能并使某些操作(例如散列)的一些成本更加明显。

于 2014-02-28T21:12:22.117 回答