В настоящее время я портирую веб-сервис, созданный для работы с Google App Engine. Одной из основных функций веб-сервиса является загрузка изображения (например, изображения профиля). В настоящее время я занимаюсь:
Теперь, чтобы перенести загрузку файла в App Engine, я использую Google Cloud Storage и следую этому уроку:
https://cloud.google.com/appengine/docs/php/googlestorage/user_upload
Я пытаюсь настроить загрузку файлов для работы с моим Android-приложением следующим образом:
CloudStorageTools::createUploadUrl
,createUploadUrl
(Я цитирую из документации Google) с загруженным файлом. Но как этот скрипт может узнать, кто загрузил полученный файл? Я не могу передать параметры, указывающие, кто загрузил файл в createUploadUrl, поэтому я не могу вставить имя файла пользователю в базе данных Cloud SQL, поэтому теперь в Cloud Storage есть только файл, не связанный ни с чем.Есть намеки? Я что-то пропустил?
Я публикую это как отдельный ответ, потому что а) он отличается от первого ответа и б) Я бы выступил за другой мой ответ на этот потому что я думаю, что лучше позволить GAE обрабатывать аутентификацию. Тем не менее, я думаю, что вы можете сделать то, что вы пытаетесь сделать таким образом:
Вместо того, чтобы направлять отдельный URL-адрес в ваш обработчик загрузки, используйте соответствие регулярному выражению, как это в вашем app.yaml, чтобы направить любые соответствующие URL-адреса в ваш обработчик:
handlers:
- url: upload_handler/(.*)
script: my-php-script-that-uploads-stuff.php
Тогда при вызове createUploadURL
просто передайте свой API_KEY после 'upload_handler/'
в качестве аргумента запроса, например
$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-адрес запроса, чтобы получить строку запроса, а затем проанализирует строку запроса, заполнив значение API_KEY значением, переданным в URL-адресе в локальной области видимости.
Я только что протестировал этот шаблон извлечения материала из URL запроса в php-скрипте с помощью dev_appserver, и это сработало.
Я думаю, что вы можете сделать это с помощью Сервис Google Appengine для пользователей в вашем PHP-скрипте.
По приведенной выше ссылке со страницы «Обзор» службы пользователей, вот как вы получаете текущего пользователя:
use google\appengine\api\users\User;
use google\appengine\api\users\UserService;
$user = UserService::getCurrentUser();