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

时间:2013-09-03 20:16:48

标签: java amazon-s3 cloud blobstore jclouds

我正在使用jclouds 1.6.1在网络应用程序中进行孵化(使用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(容器,名称)实际上是在返回之前下载文件的吗?有没有其他方法可以获得我可以直接发送到浏览器的异步输入流?

1 个答案:

答案 0 :(得分:4)

您只能通过以下方式查询元数据:

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

BlobStore.getBlob启动下载但不下载整个blob数据。相反,它通过Payload或InputStream流式传输数据。它会阻塞,直到blobstore返回blob元数据。

请注意,您应该调用Payload.close以确保关闭底层套接字。