java - JClouds:BlobStore.getBlob()需要很长时间

我正在使用jclouds 1.6.1——在web应用程序中孵化(使用scala playframework 2.1.3,但这不重要)。
由于jclouds中接收blob的所有其他方法似乎都已被弃用,所以我想使用

BlobStore.getBlob(container,name).getPayload().getInput()

获取存储数据的输入流。我想把这些数据流到浏览器中,而不必在服务器上存储整个blob。
有时我只想得到一些元数据,比如
BlobStore.getBlob(container,name).getMetadata().getContentMetadata().getContentLength()

然而,
BlobStore.getBlob(container,name)

需要很长时间才能返回(我想,它会将blob加载到内存中)。这会导致用户单击“下载”后,webapp没有响应。我希望云数据立即开始流到浏览器(playframework支持这一点)。
当我只想获取元数据时,这个超时会更糟(我可能想获取许多文件的元数据,而不将它们下载到webapp)。
我说得对吗?返回前blobstore.getblob(container,name)是否正在下载文件?有没有其他方法可以获得异步输入流,我可以直接发送到浏览器?

最佳答案

您只能使用以下项查询元数据:

BlobMetadata metadata = BlobStore.blobMetadata(container, name);
Long contentLength = metadata.getContentMetadata().getContentLength();

BlobStore.getBlob启动下载,但不下载整个blob数据。相反,它通过有效负载或inputstream来传输数据。它会一直阻塞,直到blobstore返回blob元数据。
请注意,您应该调用payload.close以确保关闭基础套接字。

本文翻译自 https://stackoverflow.com/questions/18600755/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java amazon-s3 cloud blobstore jclouds


相关文章:

java - 使用Itext更改PDF的方向

java - Java重新排序会影响System.currentTimeMillis()吗?

java - Java Swing概念与云有什么关系?

javascript - 如何在Parse Cloud Code中保存批量数据?

java - 如何使用Java读取BitBucket / Stash分支及其链接的JIRA票证

java - 按字母顺序对Enum.values()进行排序,并将它们添加到Spinner ArrayAdapter中

javascript - 使用AWS PreSignedURL将图像上传到Amazon S3

amazon-web-services - 安全地从S3提供内容

ruby-on-rails - 使用时的Amazon S3无效日期在url_for中过期

c++ - 如何将JSON发布到Web服务器?