JClouds S3:上传文件时指定内容长度
Posted
技术标签:
【中文标题】JClouds S3:上传文件时指定内容长度【英文标题】:JClouds S3: Specify Content Length when uploading file 【发布时间】:2014-04-02 01:12:12 【问题描述】:我使用 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 和/或内容长度?
【问题讨论】:
【参考方案1】:您应该使用 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 重复的功能,并使某些操作(例如散列)的一些成本更加明显。
【讨论】:
以上是关于JClouds S3:上传文件时指定内容长度的主要内容,如果未能解决你的问题,请参考以下文章