Используйте BlobstoreService и ImageService для загрузки / обслуживания изображений, нарисованных из холста HTML5 - PullRequest
2 голосов
/ 20 сентября 2010

Я работаю над приложением Appengine на Java, которое позволяет пользователям загружать изображения, нарисованные через библиотеку HTML5 Canvas под названием PaintWeb (http://code.google.com/p/paintweb/).

В настоящее время у меня есть сервлет, который получает POST XMLHttpRequest от библиотека javascript paintweb как форматированное изображение.

  1. Библиотека Paintweb.js отправляет XMLHttpRequest POST

      send       = 'dataURL=' + encodeURIComponent(ev.dataURL), 
      headers    = {'Content-Type': 'application/x-www-form-urlencoded'}; 
    
  2. Пользовательский сервлет декодирует данные изображения в кодированном виде в виде большого двоичного объекта и сохраняет их в хранилище данных со связанным объектом рисования

  3. Пользовательский сервлет обслуживает BLOB-объекты в хранилище данных как ContentType ("image / png") Мне интересно, могу ли я использовать новые BlobstoreService и ImageService функции для загрузки моих холст-изображений HTML5 и использования их в качестве чистых BLOB-объектов (как показано в этом руководстве GWT BlobstoreService и ImageService )

В соответствии с документацией (http://code.google.com/appengine/docs/java/blobstore/overview.html#Uploading_a_Blob) кажется, что основной точкой остановки является то, что мне нужно POST-форму с:

 <input type="file" name="myFile"> 

То, что я не думаю, возможно из Paintweb. Возможно, можно было бы обойти эту проблему, если бы на стороне сервера был какой-то способ хранения большого двоичного объекта в хранилище больших двоичных объектов (вместо хранилища данных), поэтому что вы можете воспользоваться преимуществами отказа от использования квоты ЦП для обслуживания изображений.

Возможно ли или даже хорошая идея использовать Appengine URL Fetch и переслать загрузку изображений в Blobstorage "createUploadURL ()" со стороны сервера.

http://code.google.com/appengine/docs/java/urlfetch/usingjavanet.html

Кажется, что это возможно, но я не уверен, что это сэкономит мне ресурсы в долгосрочной перспективе (изображения - это простые маленькие рисунки, которые можно просматривать намного чаще, чем время загрузки, поэтому я чувствую, что получу хранение / обслуживание пособий в BlobstoreService.

1 Ответ

2 голосов
/ 20 сентября 2010

Лучшим вариантом здесь будет использование XMLHTTPRequest с телом, состоящим из нескольких частей / данных формы, содержащим созданное изображение.Это может быть сделано, чтобы соответствовать тому, что ожидает Blobstore.Процедура, которую необходимо выполнить, будет выглядеть примерно так:

  1. Выполните вызов JSON API, который возвращает новый URL для загрузки в хранилище BLOB-объектов
  2. Создайте сообщение MIME, содержащее данные изображения как одну частьвместе с любыми другими полями, которые вы хотите включить.
  3. Используйте XMLHTTPRequest для загрузки формы в blobstore.

Для этого вам нужно будет создать mimeотправьте сообщение самостоятельно или найдите библиотеку Javascript, которая сделает это за вас.

...