Google Cloud Storage — Зная, кто загрузил

В настоящее время я портирую веб-сервис, созданный для работы с Google App Engine. Одной из основных функций веб-сервиса является загрузка изображения (например, изображения профиля). В настоящее время я занимаюсь:

  • Аутентифицируйте пользователя, который хочет загрузить изображение, используя его уникальный API-ключ и другие данные.
  • Загрузите файл, присвойте ему уникальное имя и сохраните имя файла в строке пользователя в базе данных mysql.

Теперь, чтобы перенести загрузку файла в App Engine, я использую Google Cloud Storage и следую этому уроку:
https://cloud.google.com/appengine/docs/php/googlestorage/user_upload

Я пытаюсь настроить загрузку файлов для работы с моим Android-приложением следующим образом:

  • Пользователь делает запрос, веб-служба аутентифицирует его и отправляет в ответ URL загрузки, созданный CloudStorageTools::createUploadUrl,
  • Пользователь загружает изображение на этот URL
  • Теперь вот проблема: После того, как загрузка сделана, POST сделан к данному файлу php в createUploadUrl (Я цитирую из документации Google) с загруженным файлом. Но как этот скрипт может узнать, кто загрузил полученный файл? Я не могу передать параметры, указывающие, кто загрузил файл в createUploadUrl, поэтому я не могу вставить имя файла пользователю в базе данных Cloud SQL, поэтому теперь в Cloud Storage есть только файл, не связанный ни с чем.

Есть намеки? Я что-то пропустил?

1

Решение

Я публикую это как отдельный ответ, потому что а) он отличается от первого ответа и б) Я бы выступил за другой мой ответ на этот потому что я думаю, что лучше позволить 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, и это сработало.

2

Другие решения

Я думаю, что вы можете сделать это с помощью Сервис Google Appengine для пользователей в вашем PHP-скрипте.

По приведенной выше ссылке со страницы «Обзор» службы пользователей, вот как вы получаете текущего пользователя:

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

$user = UserService::getCurrentUser();
0

По вопросам рекламы [email protected]