【问题标题】:JClouds: BlobStore.getBlob() taking a long timeJClouds:BlobStore.getBlob() 需要很长时间
【发布时间】:2013-09-07 04:30:58
【问题描述】:

我在 web 应用程序中使用 jclouds 1.6.1-incubating(使用 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 支持)。

当我只想获取元数据时,这个超时会更糟(我可能想获取许多文件的元数据而不将它们全部下载到 web 应用程序)。

我说的对吗? BlobStore.getBlob(container,name) 在返回之前实际上是在下载文件吗?是否有另一种方法可以获取可以直接发送到浏览器的异步输入流?

【问题讨论】:

    标签: java amazon-s3 cloud blobstore jclouds


    【解决方案1】:

    您只能查询元数据:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 2014-10-09
      • 2012-11-26
      • 2019-12-27
      • 2017-10-22
      • 2020-11-15
      • 2016-05-19
      • 2011-11-20
      • 2011-12-19
      相关资源
      最近更新 更多