Можно ли загрузить файл через сервлеты GWT RPC? - PullRequest
4 голосов
/ 06 февраля 2012

возможно ли создать загрузку файла с помощью механизма Googles GWT RPC? Как и сейчас, я использую простой HTTPServlet с методом doPost, который вызывается из формы!

Возможно ли (без помощи libs, например, gwtupload) загрузить файл XML с помощью GWTs FileUpload Widget в службу RPC и работать с содержимым файла?

BR; mybecks

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

На самом деле, есть два способа загрузки файла с помощью gwtupload, как вы упомянули, и через gwt-rpc этот способ немного сложен из-за безопасности браузера. Для реализации с gwt-rpc вы должны переопределить метод service(final HttpServletRequest request,HttpServletResponse response) внутри реализации сервиса, который наследует RemoteServiceServlet. Для клиентской части у вас должен быть такой код:

final FormPanel formPanel = new FormPanel();
formPanel.setAction(GWT.getModuleBaseURL()+”fileUpload”);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setMethod(FormPanel.METHOD_POST);

Внутри service метода вы можете получить файл с помощью , используя FileUpload , и не забудьте зарегистрировать шаблон URL-адреса fileupload в вашем файле web.xml, а также @RemoteServiceRelativePath("path") в интерфейсе вашего сервиса, который наследует RemoteService. Удачи!

3 голосов
/ 06 февраля 2012

Это возможно, но это не так просто. Сначала вам нужно будет прочитать файл из клиентского кода. Большинство браузеров поддерживают FileReader API, но не все из них. Поэтому для доступа к файлам в Internet Explorer вам придется использовать flash или какую-либо другую технологию плагинов.

Также по умолчанию в GWT нет привязки для File Reader API, поэтому вам придется делать это самостоятельно.

Следующее, что вы собираетесь отправлять файлы в виде строки в кодировке Base64 через GWT -RPC, и вам придется декодировать на стороне сервера. Из-за этого вы можете столкнуться с некоторыми проблемами с памятью, если ваши пользователи начнут загружать много больших файлов (около 20 МБ).

...