У меня есть приложение на Google App Engine, написанное на python, я использую это приложение в качестве сервера для моего веб-приложения, написанного на PHP, которое я использую в качестве клиента для вызова моего API на стороне сервера в GAE с использованием конечной точки javascript.
Я хочу загрузить файл из своего веб-приложения в приложение GAE, используя конечные точки облака Google. Я изучал хранилище BLOB-объектов, но это не сильно помогло.
Пожалуйста, предложите, что мне делать.
Вы должны использовать облачное хранилище для хранения ваших файлов, а не Blobstore.
Используйте GCS, потому что:
Чтобы использовать GCS, вы должны использовать https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/
Вот пример в Java для использования этого API:
GcsService gcsService = GcsServiceFactory.createGcsService();
GcsFilename filename = new GcsFilename(CONSTANTES.BUCKETNAME, unique+".jpg");
GcsFileOptions options = new GcsFileOptions.Builder()
.mimeType("image/jpg")
.acl("public-read")
.build();
GcsOutputChannel writeChannel = gcsService.createOrReplace(filename, options);
РЕДАКТИРОВАТЬ: Это написано (моя ошибка), как будто вы были на Java. Не стесняйтесь использовать аналогичный шаблон для PHP на App Engine.
То, что другой пользователь написал о GCS, отвечает на вопрос хранения вашего вопроса — вам определенно следует использовать GCS — но что касается вашей идеи размещения данных формы в функции конечных точек, это определенно не рекомендуется. Вызовы API должны быть маленькими кусочками данных. API должен быть похож на бумажный самолетик, легко летящий к вашему серверу для запроса реальных данных.
Чтобы пользователи могли загружать файлы в GCS, нужно предоставить им страницу с формой загрузки файлов (enctype="multipart/form-data"
) где форма action
Параметр — это URL для загрузки, созданный для создания шаблона страницы в вашем сервлете. doGet(HttpServletRequest req, HttpServletResponse resp)
метод с использованием Функция клиентской библиотеки GCS createUploadUrl()
. Вы можете использовать это так:
String uploadUrl = blobstoreService
.createUploadUrl("/upload",
UploadOptions.Builder.withGoogleStorageBucketName("my_bucket"));
Таким образом, вы можете получить URL загрузки для GCS, на который будет отправлен файл пользователя POST. Маршрут /upload
это маршрут в вашем приложении, который будет перенаправлен после получения загрузки. Любые добавленные вами дополнительные параметры формы будут по-прежнему видны обработчику запросов ( doPost()
метод сервлета), который вы определяете для этого маршрута.
Имея всю эту информацию, вы готовы приступить к отправке форм загрузки файлов своим пользователям, не беспокоясь о том, как это взаимодействует с конечными точками облака. Используйте конечные точки для определения вызовов API, необходимых вашему клиенту javascript / Android / iOS, а не для загрузки файлов.