2014-11-19 3 views
1

단계로 크기가 모든 파일의 목록을 보여줍니다.Google 클라우드 스토리지 버킷에 이미지 파일을 저장 한 후에는 "0 바이트"나는 다음 한

1) Blob 저장소에 이미지를 저장 (이 필요합니다) 2) Blobstore에서 이미지를 가져와 GCS 버킷에 저장합니다.

이미지 파일을 GCS 버킷에 직접 저장하면 정상적으로 작동합니다. 하지만 Blobstore에서 가져오고 싶습니다.

Map<String, List<BlobInfo>> blobsData = blobstoreService.getBlobInfos(req); 
    for (String key : blobsData.keySet()) 
     { 
      for(BlobInfo blob:blobsData.get(key)) 
      { 
    byte[] b = new byte[(int)blob.getSize()]; 
    BlobstoreInputStream in = new BlobstoreInputStream(blob.getBlobKey()); 
    in.read(b); 

    GcsService gcsService = GcsServiceFactory.createGcsService(); 
    GcsFilename filename = new GcsFilename("casfilestorage", blob.getFilename()); 
    GSFileOptionsBuilder builder = new GSFileOptionsBuilder() 
    .setAcl("public_read") 
    .setBucket(BUCKET_NAME) 
    .setKey(blob.getFilename()) 
    .setMimeType(blob.getContentType()); 

    AppEngineFile writableFile = fileService.createNewGSFile(builder.build()); 
    boolean lock = true; 

    writeChannel = fileService.openWriteChannel(writableFile, lock); 
    os = Channels.newOutputStream(writeChannel); 

    UploadOptions uploadOptions = UploadOptions.Builder.withGoogleStorageBucketName("casgaestorage"); 
    //String uploadUrl = blobstoreService.createUploadUrl("/serve", uploadOptions); 

    os.close(); 
    writeChannel.closeFinally(); 

    in.close(); 
      } 
     } 
+1

,하지만 당신이 그 바이트 쓰기 어디서 볼 수 없습니다 출력 스트림에 삽입합니다. –

답변

0

그냥 바이트 [] 방법을 쓸 통과, 코드 아래를 참조하십시오 : 당신이 바이트 배열 b에 방울을 읽을 어디서 볼

GcsService f_ObjGcsService = GcsServiceFactory.createGcsService(); 

GcsFilename f_ObjFilename = new GcsFilename("BUCKET NAME", "FileName"); 
GcsFileOptions f_ObjOptions = new GcsFileOptions.Builder() 
.mimeType("Content Type") 
.acl("public-read") 
.build(); 

GcsOutputChannel f_ObjWriteChannel = f_ObjGcsService.createOrReplace("Filename", f_ObjOptions); 

PrintWriter f_ObjWriter = new PrintWriter(Channels.newWriter(f_ObjWriteChannel, "UTF8")); 

f_ObjWriter.flush(); 

f_ObjWriteChannel.waitForOutstandingWrites(); 

f_ObjWriteChannel.write(ByteBuffer.wrap("Byte Array that u get from blob")); 

f_ObjWriteChannel.close();