2013-09-03 5 views
3

웹 응용 프로그램에서 jclouds 1.6.1-incubating을 사용하고 있습니다 (scala playframework 2.1.3을 사용하지만 중요하지 않음). JClouds : 오랜 시간이 걸리는 BlobStore.getBlob()

의 Blob를받을 수 jclouds의 다른 모든 방법이되지 않는 것 같다 때문에

, 나는 저장된 데이터의 입력 스트림을 얻을

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

를 사용하고 싶습니다. 이 데이터를 브라우저에 스트리밍하고 서버에 전체 BLOB를 실제로 저장할 필요가 없습니다.

때때로 나는 단지 (나는 그것이 메모리에 BLOB를로드, 가정)를 호출하는 매우 오래 걸립니다

BlobStore.getBlob(container,name) 

에 그러나

BlobStore.getBlob(container,name).getMetadata().getContentMetadata().getContentLength() 

, 전화와 같은 일부 메타 데이터를 얻을 싶어요. 이로 인해 사용자가 "다운로드"를 클릭하면 Webapp가 응답하지 않게됩니다. 클라우드 데이터가 브라우저로 즉시 스트리밍되기를 바랍니다 (playframework는이를 지원합니다).

메타 데이터 만 가져오고 싶을 때이 시간 초과는 더욱 심각합니다 (모든 파일을 웹 응용 프로그램에 다운로드하지 않고 많은 파일의 메타 데이터를 얻고 싶을 수도 있습니다).

맞습니까? 반환하기 전에 실제로 BlobStore.getBlob (container, name)이 파일을 다운로드하고 있습니까? 브라우저에 직접 보낼 수있는 비동기 입력 스트림을 얻을 수있는 또 다른 방법이 있습니까?

답변

4

당신 만 메타 데이터를 조회 할 수 있습니다

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

BlobStore.getBlob는 다운로드를 시작하지만, 전체 BLOB 데이터를 다운로드하지 않습니다. 대신 Payload 또는 InputStream을 통해 데이터를 스트리밍합니다. blobstore가 blob 메타 데이터를 반환 할 때까지 차단합니다.

기본 소켓을 닫으려면 Payload.close를 호출해야합니다.