java - 将图像文件存储到 Google Cloud Storage Bucket 后,它会显示所有大小为 "0 bytes"的文件的列表

标签 java google-app-engine google-cloud-storage blobstore

我遵循的步骤:

1)将图像存储在Blobstore中。(这是必要的) 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();
             }
         }

最佳答案

引用下面的代码,只需将您的 byte[] 传递给 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();

关于java - 将图像文件存储到 Google Cloud Storage Bucket 后,它会显示所有大小为 "0 bytes"的文件的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012182/

相关文章:

java - Google Cloud 端点未在端点列表中创建 API

node.js - gcloud Preview 应用程序部署返回 400,并显示消息 App Engine 服务帐户对项目的权限不足。需要开发商或业主

google-cloud-storage - gsutil cp -z如何一次复制和gzip多种文件类型

tensorflow - 在大数据上运行 Tensorflow

Java PreparedStatement Wilcard 不起作用

java - 接收从 Observable 发出的项目

java - Android 从 Json 对象解析字符串值

java - 插入 mongoDB 时发生 MongoInternalException

PHP 的 Curl 不适用于 AppEngine

google-cloud-storage - 如何调试谷歌云存储的访问控制问题?