Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图像文件存储在Google云存储桶中后,显示所有大小为“0字节”的文件列表_Java_Google App Engine_Google Cloud Storage_Blobstore - Fatal编程技术网

Java 将图像文件存储在Google云存储桶中后,显示所有大小为“0字节”的文件列表

Java 将图像文件存储在Google云存储桶中后,显示所有大小为“0字节”的文件列表,java,google-app-engine,google-cloud-storage,blobstore,Java,Google App Engine,Google Cloud Storage,Blobstore,我遵循的步骤是: 1将图像存储在Blobstore中。这是必需的 2从blobstore获取图像并保存在GCS bucket中 如果我将图像文件直接存储到GCS bucket中,那么它可以正常工作。 但我想从Blobstore拿 Map<String, List<BlobInfo>> blobsData = blobstoreService.getBlobInfos(req); for (String key : blobsData.keySet())

我遵循的步骤是:

1将图像存储在Blobstore中。这是必需的 2从blobstore获取图像并保存在GCS bucket中

如果我将图像文件直接存储到GCS bucket中,那么它可以正常工作。 但我想从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();
             }
         }

参考下面的代码,只需将字节[]传递给write方法:

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();

我看到了将blob读入字节数组b的位置,但没有看到将这些字节写入输出流的位置。