将文件直接上传到适用于GAE应用的Google云端存储

时间:2016-05-14 09:29:51

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

我正在考虑从Blobstore切换到Google云端存储,以处理项目中的图片上传(因为Google称Blobstore为“被取代”)。

在Blobstore中,多部分表单将直接提交(上传)到Blobstore,然后Blobstore会重写请求并重定向到GAE应用程序以处理BlobKey(s)。这意味着GAE应用程序的负载非常小。

有没有办法在Google云端存储(GCS)中实施类似的工作流程?

Reading and Writing to Google Cloud Storage给出的示例涉及GAE代码处理上传,读取数据并将其保存在GCS中。

类似于提供(例如)上传的图像文件:似乎必须在一个GAE代码中实现处理程序以从GCS读取并返回图像数据。

有没有办法简单地为GCS中的资源生成一个URL(AFAIK AWS S3支持这个)并让它从那里提供服务?

2 个答案:

答案 0 :(得分:2)

您可以继续使用blobstore API但使用GCS中的实际存储空间,这意味着相同的上传行为以及可能对您的应用程序进行的最小更改。

来自Using the Blobstore API with Google Cloud Storage (Python)

  

您可以使用Blobstore API将Blob存储在云存储中   将它们存储在Blobstore中。您需要按照描述设置存储桶   在Google Cloud Storage文档中并指定存储桶   和blobstore.blobstore.create_upload_url中的文件名    gs_bucket_name 参数。在上传处理程序中,您需要处理返回的FileInfo元数据并明确存储   稍后需要Google Cloud Storage文件名来检索blob。

此处还提供了一个完整的示例应用程序。

更新:糟糕,上面的答案适用于Python环境,Java遵循:

来自Using the Blobstore API with Google Cloud Storage (Java)

  

您可以使用Blobstore API将Blob存储在云存储中   将它们存储在Blobstore中。您需要按照描述设置存储桶   在Google Cloud Storage文档中并指定存储桶   和 BlobstoreService createUploadUrl中的文件名,指定   UploadOptions参数中的存储桶名称。在您的上传中   处理程序,您需要处理返回的FileInfo元数据和   明确存储检索所需的Google云端存储文件名   后来的blob。

Java没有完整的示例应用程序。

答案 1 :(得分:2)

Google云端存储支持生成上传或读取的网址。 有关详细信息,请参阅:https://cloud.google.com/storage/docs/access-control/create-signed-urls-program

gcloud-java-storage库可以帮助创建这样的signed URL