我目前正在移植我为使用Google App Engine而构建的网络服务 . Web服务的主要功能之一是上传图像(例如, Profiles 图片) . 目前我所做的是:
-
使用其唯一的API KEY和其他数据验证要上载图像的用户 .
-
上传文件,给它一个唯一的名称,并将文件名存储在mysql数据库的用户行中 .
现在,为了将文件上传到App Engine,我正在使用Google Cloud 端存储并遵循本教程:https://cloud.google.com/appengine/docs/php/googlestorage/user_upload
我试图通过以下方式将文件上传与我的Android应用程序一起使用:
-
用户发出请求,webservice对他进行身份验证,并作为响应发送
CloudStorageTools::createUploadUrl
创建的上传URL . -
用户将图像上传到此URL
-
Now heres the problem: 上传完成后,对
createUploadUrl
中的给定php文件进行POST(我引用google 's docs) with the uploaded file. But how can this script know who uploaded the file it got? I can' t传递任何参数,指示谁将文件上传到createUploadUrl,因此我无法将文件名插入到用户的 Cloud SQL数据库,现在只有一个文件与 Cloud 存储中的任何内容都没有关联 .
任何提示?我错过了什么吗?
2 回答
我'm posting this as a separate answer because a) it'的方法不同于第一个答案,而b) I'd advocate for my other answer over this one 因为我认为's best to let GAE handle auth. However, I think you can do what you'试图这样做:
不要将单个URL路由到上传处理程序,而是在app.yaml中使用这样的正则表达式匹配来将任何匹配的URL路由到您的处理程序:
然后在调用
createUploadURL
时,只需在'upload_handler/'
之后传入您的API_KEY作为查询参数,例如然后在
my-php-script-that-uploads-stuff.php
:这将解析请求URL以获取查询字符串,然后解析查询字符串,使用本地范围中URL传递的值填充API_KEY的值 .
我刚用dev_appserver测试了这个从php脚本中的请求URL中提取东西的模式,并且它工作正常 .
我想你可以在php脚本中使用google appengine users service来做到这一点 .
在上面的链接中,从用户服务的“概述”页面,以下是获取当前用户的方式: