首页 文章

Google Cloud 端存储 - 了解上传者

提问于
浏览
1

我目前正在移植我为使用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 回答

  • 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路由到您的处理程序:

    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中提取东西的模式,并且它工作正常 .

  • 0

    我想你可以在php脚本中使用google appengine users service来做到这一点 .

    在上面的链接中,从用户服务的“概述”页面,以下是获取当前用户的方式:

    use google\appengine\api\users\User;
    use google\appengine\api\users\UserService;
    
    $user = UserService::getCurrentUser();
    

相关问题