【问题标题】:Upload file using google cloud end points to google app engine application使用谷歌云端点将文件上传到谷歌应用引擎应用程序
【发布时间】:2014-11-06 10:04:56
【问题描述】:

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

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

请建议我该怎么做。

【问题讨论】:

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


    【解决方案1】:

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

    使用 GCS 是因为:

    • Google 正在远离 blobstore
    • GCS 提供更多功能,例如 acl、文件夹等。
    • 您可以使用文件名和 blobstore,例如为图片提供网址
    • 您可以为非图片创建服务网址
    • 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);
    

    【讨论】:

    • 感谢您的回复,我会尝试实施它,如果它解决了我的问题,请告诉您。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多