Google云端存储 - 了解上传者

时间:2014-09-26 21:49:44

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

我目前正在移植我为使用Google App Engine而构建的网络服务。 Web服务的主要功能之一是上传图像(例如,个人资料图片)。目前我所做的是:

  • 使用其唯一的API KEY和其他数据验证要上传图像的用户。
  • 上传文件,给它一个唯一的名称,并将文件名存储在mysql数据库的用户行中。

现在,为了将文件上传移植到App Engine,请使用Google云端存储并按照本教程进行操作: https://cloud.google.com/appengine/docs/php/googlestorage/user_upload

我试图通过以下方式让文件上传与我的Android应用程序一起使用:

  • 用户发出请求,网络服务对他进行身份验证,然后发送CloudStorageTools::createUploadUrl创建的上传网址。
  • 用户将图片上传到此网址
  • 现在发生了问题:上传完成后,对createUploadUrl中的给定php文件进行了POST(我引用了google' docs)文件。但是这个脚本怎么知道谁上传了它得到的文件?我无法传递任何指示将文件上传到createUploadUrl的参数,因此我无法将文件名插入Cloud SQL数据库中的用户,因此现在只有一个文件与云存储中的任何内容都没有关联。

任何提示?我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我将此作为一个单独的答案发布,因为a)它与第一个答案的方法不同,并且b)我主张我的另一个答案因为我觉得最好是让GAE处理auth。但是,我认为你可以做你想做的事情:

不要将单个网址路由到您的上传处理程序,而是在app.yaml中使用这样的正则表达式匹配来将任何匹配的网址路由到您的处理程序:

 handlers:
 - url: upload_handler/(.*)
   script: my-php-script-that-uploads-stuff.php

然后在调用createUploadURL时,只需在'upload_handler/'之后传递API_KEY作为查询参数,例如

$upload_url = CloudStorageTools::createUploadUrl(sprintf('/upload_handler/?API_KEY=%s', $API_KEY), $options);

然后在my-php-script-that-uploads-stuff.php

parse_str(parse_url($_SERVER['REQUEST_URI'])['query'])

这将解析请求URL以获取查询字符串,然后解析查询字符串,使用本地范围中URL传递的值填充API_KEY的值。

我刚刚使用dev_appserver在php脚本中测试了从请求URL中提取内容的模式,并且它有效。

答案 1 :(得分:0)

我认为您可以使用php脚本中的google appengine users service来完成此操作。

在上面的链接中,从用户服务的“概述”页面,您可以了解当前用户的使用方式:

use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();