2014-11-06 76 views
1

我用Python编写的关于谷歌应用程序引擎的应用程序,我使用这个应用程序作为服务器到我的web应用程序用PHP编写的,我正在使用的客户端调用我的服务器端api在GAE上使用javascript结束点。上传文件到Google App引擎应用

我想使用谷歌云结束points.I研究有关团块存储上传从我的web应用程序文件到我的GAE应用程序,但它并没有多大帮助。

请建议我应该怎么做。

回答

1

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

使用GCS因为:

  • 谷歌正在远离Blob存储
  • 移动GCS提供更像ACL,文件夹和更多的功能。
  • 您可以使用文件名和像图像服务URL Blob存储区
  • 您可以创建服务的URL的非图像
  • 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

感谢您的回复,我会尝试和实现它,让你知道,如果它解决我的问题。 – 2014-11-07 12:54:05

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)方法上传的URL。你可以这样使用它:

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

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

有了这些信息,你就可以开始服务文件上传表格,你的用户,而不用担心这个如何与云交互的端点。使用端点来定义您的javascript/Android/iOS客户端所需的API调用,而不是用于处理文件上传。