我目前正在移植我为使用Google App Engine而构建的网络服务。 Web服务的主要功能之一是上传图像(例如,个人资料图片)。目前我所做的是:
现在,为了将文件上传移植到App Engine,请使用Google云端存储并按照本教程进行操作: https://cloud.google.com/appengine/docs/php/googlestorage/user_upload
我试图通过以下方式让文件上传与我的Android应用程序一起使用:
CloudStorageTools::createUploadUrl
创建的上传网址。createUploadUrl
中的给定php文件进行了POST(我引用了google' docs)文件。但是这个脚本怎么知道谁上传了它得到的文件?我无法传递任何指示将文件上传到createUploadUrl的参数,因此我无法将文件名插入Cloud SQL数据库中的用户,因此现在只有一个文件与云存储中的任何内容都没有关联。 任何提示?我错过了什么吗?
答案 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();