【问题标题】:JClouds S3: Specify Content Length when uploading fileJClouds S3:上传文件时指定内容长度
【发布时间】: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 和/或内容长度?

【问题讨论】:

    标签: amazon-s3 jclouds http-content-length


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

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多