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

Upload file using google cloud end points to google app engine application

本文关键字:应用程序 谷歌 引擎 云端 端点 文件      更新时间:2023-09-26

我在谷歌应用程序引擎上有一个用python编写的应用程序,我把这个应用程序用作用PHP编写的web应用程序的服务器,我把它用作客户端,用javascript端点调用GAE上的服务器端api。

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

请建议我该怎么做。

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

使用GCS是因为:

  • 谷歌正在摆脱困境
  • GCS提供了更多的功能,如acl、文件夹等
  • 您可以为图像使用文件名和类似blobstore的服务url
  • 您可以为非图像创建服务url
  • GCS价格低廉,有一个免费的默认存储桶

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

下面是一个使用API的Java示例:

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

EDIT:这是像在java上一样写的(我的错误)。请随意在AppEngine上使用类似的PHP模式。

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

让用户将文件上传到GCS的方法是为他们提供一个带有文件上传表单(enctype="multipart/form-data")的页面,其中表单action参数是使用GCS客户端库函数createUploadUrl()在servlet的doGet(HttpServletRequest req, HttpServletResponse resp)方法中为页面模板生成的上传URL。你可以这样使用它:

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

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

有了所有这些信息,您就可以开始向用户提供文件上传表单,而无需担心它如何与云端点交互。使用端点定义javascript/Android/iOS客户端所需的API调用,而不是用于处理文件上载。