2013-04-10 3 views

ответ

7

На самом деле вы можете !, У меня есть приложение делает это уже.

  1. Вы должны браузеры, поддерживающие FileApi (современные браузеры делают)
  2. Вы должны написать некоторый JSNI код, чтобы прочитать содержимое файла в строку base64.
  3. Вы получите (асинхронно) строку, вы можете назначить для любого Bean атрибута в приложении и отправить его через РФ, RPC и т.д.

Здесь у вас есть копирования/вставки из наиболее значимых кода я использую:

public final native void readAsDataURL(MyClass that, FileUpload input) /*-{ 
    var files = [email protected]::getElement()().files; 
    var reader = new FileReader(); 
    reader.onload = function (evt) { 
     [email protected]::done(Ljava/lang/String;)(evt.target.result); 
    } 
    reader.readAsDataURL(files[0]); 
    }-*/; 

было бы пришедший-скоро особенность в моей gwtupload библиотеки.

+0

В качестве альтернативы вы также можете использовать библиотеку «Элементаль». Должно быть возможно использовать большую часть FileAPI (i.e FileReader) без JSNI. –

+0

Я попробовал Elemental, и я обнаружил некоторые проблемы: один из них был очень специфичным для хрома, а во-вторых, у меня возникла проблема с созданием некоторых объектов в FF (я не помню сейчас), поэтому я предпочел общую реализацию для всех браузеров, поддерживающих fileapi –

+1

Вы правы. В нем есть некоторые особенности хром. Но мне очень нравится API, потому что он так близок к API/спецификации javascript. Таким образом, вы можете легко взять пример из камней HTML5 и быстро отправить его на «Элементаль». Надеюсь, со временем большинство префиксов поставщиков будут удалены. Затем Elemental мог легко поддерживать различные браузеры. –

-1

IMORPC или Request Factory смысл XMLHttpRequest, который не позволяет вам encode и отправить local файлы в server.

Вам необходимо написать свой собственный servlet и GWT FormPanel.

полная example here с servlet и его mapping

+1

Неправильно, на самом деле 'XMLHttpRequest' позволяет отправлять файлы в современных браузерах, просто используя sendhttp: // xhr.send (myfile.files [0])', но вы должны настроить gwt-обертку для xhr. –

+0

Hoo ... informative.thanks :) –

+0

@downvoter .. Я упомянул об этом как ИМО ... не ответ :) Спасибо за прочитанный мой ответ. –

Смежные вопросы