标签:blobstore amazon-s3 cloud jclouds java
我正在Web应用程序中使用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加载到内存中).这导致用户单击“下载”后,Web应用程序无响应.我希望云数据立即开始流传输到浏览器(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以确保关闭基础套接字.
标签:blobstore,amazon-s3,cloud,jclouds,java 来源: https://codeday.me/bug/20191030/1968108.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。