Загрузка файла с использованием GWT с диалоговым окном для просмотра файла - PullRequest
2 голосов
/ 07 июня 2011

Я работаю над веб-приложением GWT, где пользователи загружают обновления (что-то вроде твиттера). Обновление текст + вложение. Я хочу, чтобы пользователь напечатал обновление, опционально нажмите кнопку загрузки, которая выдает всплывающее окно для просмотра файла, а затем, когда они закончили, наконец нажмите кнопку «отправить обновление». Текст + вложение будет храниться в строке в MySQL. Текст в виде ususal varchar и файл в виде капли. Размер файла будет небольшим.

Я не знаю, как этого добиться в данный момент. Глядя на API и поиск в Google, я нашел используемый виджет «FileUpload». Документы говорят, что он используется для FormPanel. Я не уверен, действительно ли я все понял и как мне применить это в моем случае.

Как мне решить мою проблему?

1 Ответ

5 голосов
/ 07 июня 2011

Типичным способом загрузки файлов браузерами является использование поля ввода type='file'.Нет способа загрузить файл, используя AJAX без формы.По крайней мере, я не смог найти ни одного.Я думаю, это мера безопасности.

Поэтому, чтобы выгрузка файла была доступна, вы должны предоставить форму с file вводом.Форма должна быть отправлена ​​с помощью обычного запроса, а не AJAX.

Таким образом, вы должны определить FormPanel и добавить FileUpload к нему.Пример:

final FormPanel form = new FormPanel();
form.setAction("my.action");
// Because we're going to add a FileUpload widget, we'll need to set the
// form to use the POST method, and multipart MIME encoding.
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
// Create a FileUpload widget.
fileUpload = new FileUpload();
fileUpload.setName("fileUpload");
form.add(fileUpload);
// Add other components to form

Другие компоненты будут включать ввод текста пользователем.Могут быть варианты для их обработки по-разному, но я думаю, что лучше всего обрабатывать их через одну и ту же отправку формы.

Теперь вам нужно добавить что-то, чтобы инициировать отправку формы.

submitButton = new Button("Upload", new ClickHandler() {
    public void onClick(ClickEvent event) {               
        form.submit();
    }
});
formPanel.add(submitButton);

Наконец, вы должны обработать загрузку.Вы можете сделать это несколькими способами, но это должна быть регулярная обработка запросов, а не через AJAX или GWT.Мне лично нравится использовать Spring MVC для этого.Но вы можете использовать свои рамки по вашему выбору.Я не собираюсь раскрывать детали здесь.Вы можете написать скрипт на Perl, если хотите.

Есть альтернативы этому подходу.Вы можете использовать Flash, вы можете использовать Adobe AIR, и могут быть другие подходы.Есть виджеты для этих подходов в разных библиотеках.Проверьте этот сайт: http://google.wikia.com/wiki/Google_Web_Toolkit.

Отказ от ответственности: Это подход, который я использовал.Возможно, я что-то пропустил, и могут быть другие подходы, о которых мне хотелось бы узнать.

...