2013-08-20 8 views
6

프로그래밍 방식으로 생성 된 데이터를 저장하기 위해 Blobstore를 사용하는 Google App Engine 애플리케이션을 작성했습니다. 이를 위해 Files API을 사용했으며, 불행히도 Google Cloud Storage에 대한 지원이 중단되었습니다. 그래서 GCS에서 일하도록 헬퍼 클래스를 다시 작성합니다.BlobKey에서 Google Cloud Storage 파일 가져 오기

데이터 저장소에 BlobKeys를 유지하여 파일에 대한 참조를 유지하고 프로덕션 응용 프로그램의 모델을 변경하는 것이 항상 고통 스럽기 때문에 가능한 한 인터페이스를 이전과 동일하게 유지하고 싶습니다. 내가 GCS에 뭔가를 저장할 때, 나는 here 규정으로

BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName()); 

와 BlobKey를 검색하고, 나는 데이터 저장소에 지속. 내 코드에서 사용하는 문서는 GCS는 서블릿 응답 blobstoreService.serve(blobKey, resp);와 파일을 제공하는 방법을 알려줍니다,하지만 내가 어떻게 (의 InputStream, 바이트 배열 또는 무엇이든으로) 파일 내용을 검색 할 수 있습니다 그래서 여기

는 질문 추가 가공? 현재 구현에서는 AppEngineFile (둘 다 사용되지 않음)에서 읽는 FileReadChannel을 사용하여 작업을 수행합니다.

답변

3

다음은 입력 스트림으로 Google 저장 물체를 여는 코드입니다. 불행하게도, 당신은 당신 만 업로드 핸들러 (fileInfo.gs_object_name)에 cloudstorage 파일 이름을 얻고 데이터베이스에 저장할 수 있습니다 버킷 이름과 오브젝트 이름 및

GcsFilename gcs_filename = new GcsFilename(bucket_name, object_name); 
GcsService service = GcsServiceFactory.createGcsService(); 
ReadableByteChannel rbc = service.openReadChannel(gcs_filename, 0); 
InputStream stream = Channels.newInputStream(rbc); 
+0

고마워요! BlobKey를 사용하여 내용을 가져오고 싶었지만 그렇게 할 방법이 없다면 내 모델에 객체 이름을 포함하도록 리팩토링 할 것입니다. –

0

키가 아닌 블롭을 사용해야합니다. 그 후에 그것은 손실되고 BlobInfo 또는 다른 메타 데이터 구조에서 보존되지 않는 것처럼 보입니다.

구글은 말한다 : BlobInfo 메타 데이터에서는 FileInfo 메타 데이터는 달리이 데이터 저장소에 유지되지 않습니다. (블롭 키도 없지만 나중에 create_gs_key를 호출하여 필요하다면 을 생성 할 수 있습니다.) gs_object_name 을 업로드 처리기에 저장해야합니다. 그렇지 않으면이 데이터가 손실됩니다.

죄송합니다.이 링크는 파이썬이지만 자바에서 비슷한 것을 쉽게 찾을 수 있습니다. 에 설명 된대로 https://developers.google.com/appengine/docs/python/blobstore/fileinfoclass

3

blobKey을 감안할 때, Blob 저장소에서 값을 읽을 BlobstoreInputStream 클래스를 사용하는 documentation :

여기
BlobstoreInputStream in = new BlobstoreInputStream(blobKey); 
0

이 Blob 저장소 접근 방식입니다 (죄송합니다, 이것은 파이썬,하지만 내가 Java와 매우 유사하다는 것을 알고 있어야합니다.) :

blob_reader = blobstore.BlobReader(blob_key) 
if blob_reader: 
    file_content = blob_reader.read() 
관련 문제