Если я использую виджет GWT File и панель форм, может ли кто-нибудь объяснить, как обрабатывать загрузку в blobstore в движке приложений Google??
Загрузка GWT GAE через большой двоичный объект
Ответы (2)
Взгляните на gwtupload. Есть примеры использования с GAE Blobstore.
Google Blobstore специально разработан для загрузки и обслуживания больших двоичных объектов через http. Служба Blobstore (полученная с помощью BlobstoreServiceFactory.getBlobstoreService()
) создает действие http post, которое вы можете использовать в форме html. Отправляя на него файл, вы загружаете свой большой двоичный объект в хранилище больших двоичных объектов. Когда вы создаете это действие, вы указываете путь к обработчику (сервлету), где у вас есть доступ к загруженному ключу большого двоичного объекта:
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("data");
Обратите внимание, что «данные» — это поле файла в вашей форме. Все, что у вас есть, это ключ к блобу (вашему файлу). Отсюда вы берете на себя управление — вы можете сохранить этот ключ на потом и/или сразу же отправить большой двоичный объект на страницу (используя ключ):
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
blobstoreService.serve(blobKey, res);
Конечно, подробности см. в документации Google.
Одна приятная особенность хранилища BLOB-объектов заключается в том, что он интегрирован со службой Google Mapper (рудиментарная карта-уменьшение) (в разработке), которая позволяет обрабатывать файлы, загруженные в виде BLOB-объектов, построчно: http://ikaisays.com/2010
String uploadUrl = blobstoreService.createUploadUrl("/upload"); out.println("<form action='" + uploadUrl + "' method='post' enctype='multipart/form-data'>");
где /upload — это сопоставление с моим сервлетом, который обрабатывает вещи после сохранения большого двоичного объекта в blobstore (1-й фрагмент кода в ответе).
- person topchef; 30.06.2011