Загрузка в один шаг для загрузки изображений с помощью Google App Engine

1

Я пытаюсь реализовать очень базовую функциональность загрузки изображений с Android, iPhone и веб-клиентов в движок Google. Благодаря этому блогу я сделал начальную версию реализации:

Однако для загрузки изображения всегда есть 2-этапный процесс:

  1. Загрузите исходный URL-адрес загрузки в POST с помощью createUploadUrl(). Я прикрепляю фрагмент кода, который я использую:
    public class CreateUploadUrl extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        String uploadURL = blobstoreService.createUploadUrl("/image/uploadImage");
        resp.setContentType("text/plain");
        resp.getWriter().println(uploadURL);
    }
}

  1. Отправьте изображение с помощью URL-адреса, который вы только что "получили",

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        BlobKey blobKey = ParameterExtractor.getBlobParameter(req, "blob-key", blobstoreService);
        if (blobKey == null) {
            log.info("blob Id is null. POST failed");
        } else {
            log.info("ze business logic");
        }
    }

Мой вопрос в том, можно ли сделать это за один шаг, так как прямо сейчас все клиенты должны сделать http GET, чтобы получить URL-адрес для загрузки, а затем http POST для отправки изображения.

Невозможно просто сделать один Http POST с предопределенным URL.

Спасибо Раджату

Теги:
google-app-engine
http-post
blobstore

2 ответа

1

Это возможно, с ограничениями. Вы можете обойти механизм UploadUrl, создав blobs непосредственно в вашем сервлете, используя (в настоящее время экспериментальный) createNewBlobFile API. В вашем мобильном приложении (-ах) создайте HTTP-запрос, закодированный как multipart/form-data, и научите ваш сервлет, как его декодировать (например, как загрузить файлы в JSP/Servlet?). Имейте в виду, что HTTP-запросы ограничены 32 МБ; с кодировкой формы количество двоичных данных, которые вы можете загрузить, будет меньше этого.

  • 0
    Благодарю. Я дам ему шанс.
0

Конечно, вы можете сделать это с помощью одного POST. Например, у вас есть идентификатор пользователя. Этот пользователь выбирает изображение, и вы отправляете данные изображения POST и пользовательские данные на стороне клиента.

На стороне сервера (GAE) у вас есть url для расширения изображения (ваш_host/imageUpload) и сервера или контроллера Spring, которые считывают данные из запроса и записывают его в Blobstore.

  • 0
    Я не думаю, что это отвечает на мой вопрос. Что делать, если мой единственный URL-адрес POST / image / uploadUserImage "- как GAE узнает, какой большой двоичный объект нужно сохранить?
  • 0
    Зачем вам знать, какой блоб нужно хранить?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню