使用谷歌云端点上传文件到谷歌应用引擎应用程序

时间:2014-11-06 10:04:57

标签: javascript php google-app-engine google-cloud-endpoints

我在使用python编写的Google App Engine上有一个应用程序,我使用这个应用程序作为我用PHP编写的Web应用程序的服务器,我使用它作为客户端使用javascript端点在GAE上调用我的服务器端api。 / p>

我想使用谷歌云端点从我的网络应用程序上传文件到我的GAE应用程序。我研究了blob商店,但它没有多大帮助。

请建议我该怎么做。

2 个答案:

答案 0 :(得分:1)

您必须使用云存储来存储文件,而不是Blobstore。

使用GCS,因为:

  • Google正在远离blobstore
  • GCS提供更多功能,如acl,文件夹等。
  • 您可以使用文件名和blobstore(如为图像提供网址)
  • 您可以为非图片创建服务网址
  • GCS价格便宜且有免费默认存储桶

要使用GCS,您必须使用https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/

以下是Java中使用此API的示例:

GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(CONSTANTES.BUCKETNAME, unique+".jpg");
GcsFileOptions options = new GcsFileOptions.Builder()
                    .mimeType("image/jpg")
                    .acl("public-read")
                    .build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);

答案 1 :(得分:0)

编辑:这是写的(我的错误),就像你在java上一样。随意在App Engine上使用PHP的类似模式。

其他用户写的关于GCS的内容回答了你问题的存储部分 - 你绝对应该使用GCS - 但是就你将表单数据发布到端点函数的想法而言,这绝对不是建议的。 API调用应该是微小的数据。 API应该像纸飞机一样,轻轻地飞向您的服务器以请求一些真实的数据。

让用户将文件上传到GCS的方法是为他们提供一个带有文件上传表单(enctype="multipart/form-data")的页面,其中表单action参数是生成的上传网址,用于模拟您的页面使用GCS client library function createUploadUrl()的servlet的doGet(HttpServletRequest req, HttpServletResponse resp)方法。您可以像这样使用它:

String uploadUrl = blobstoreService
                       .createUploadUrl("/upload", 
                                        UploadOptions.Builder.withGoogleStorageBucketName("my_bucket"));

通过这种方式,您可以获得用户文件POST将转到的GCS上传URL。路线/upload是您的应用上的路线,一旦收到上传,该路线将被重定向。您添加的任何额外表单参数仍将对您为该路由定义的请求处理程序(servlet上的doPost()方法)可见。

通过所有这些信息,您已准备好开始向用户提供文件上传表单,而无需担心这与云端点的交互方式。使用端点来定义javascript / Android / iOS客户端所需的API调用,而不是用于处理文件上载。