Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать диалоговое окно с "Открыть/Сохранить" файл только через doPOST()? / 1 сообщений из 1, страница 1 из 1
26.07.2013, 08:58:44
    #38344614
BaurzhanS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вызвать диалоговое окно с "Открыть/Сохранить" файл только через doPOST()?
Доброго дня всем!

В разрабатываемом GWT + Ext GWT проекте прикрепил кнопки по экспорту Excel и pdf файлов, формирующихся из соответствующих сервлетов . Возникли следующие проблемы:

Поскольку посылаемых параметров со стороны клиента в потенциале больше чем 1024кБ использован POST method через requestBuider()

Хотелось бы, что бы браузер клиента вызвал диалоговое окно с предложением "Открыть/Сохранить" файл
(видел на многих сайтах и вызывается очень быстро, вероятно вызов происходит на стороне клиента до отправки сообщения на сервер (?)).

Пробовал вариант через out.flush() , так как думал что он браузер сам спросит что сделать с файлом который ко мне пришел, но видимо файл не приходит. Выглядит так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
            BufferedReader reader = new BufferedReader(
                    new FileReader(servletContext.getRealPath("XLStemplate/reportXLS.xlsx")));

            //response.setContentType("application/octet-stream; charset=UTF-8");
            PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true);

            // Read and write 4K chars at a time
            // (Far more efficient than reading and writing a line at a time)
            char[] buf = new char[4 * 1024]; // 4Kchar buffer
            int len;
            while ((len = reader.read(buf, 0, buf.length)) != -1) {
                out.write(buf, 0, len);
            }
            out.flush();
            out.close();



До этого использовался:
Код: java
1.
response.sendRedirect("XLStemplate/XLStemplate.xlsx");



Но это не побуждает никаких действий на стороне клиента. Предлагали посмотреть что-то типа response file in HTTP , но пока ничего попутного не обнаружено.


На время был реализован вариант вызова doGET() запроса через Window.open() после получения ответа от doPost() . Основано на этом и реализовано вот так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
String fileExtension ="application/x-www-form-urlencoded";
if (extension.equals("pdf"))
{
    sURLforRequest = GWT.getHostPageBaseURL() + "requiredPDF";
    fileExtension = "application/pdf";
}
else if (extension.equals("xls"))
{
    sURLforRequest = GWT.getHostPageBaseURL() + "requiredXLS";
    fileExtension = "application/x-www-form-urlencoded";
}

RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, sURLforRequest);
//this is important
builder.setHeader("Content-type", fileExtension);
//builder.setHeader("Content-type", "application/x-www-form-urlencoded");
//builder.setHeader("Content-type", "application/octet-stream");

builder.sendRequest(sData, new RequestCallback() {
    @Override
    public void onResponseReceived(Request request, Response response) {
        //TODO: replace with servlet link
        Window.open(sURLforRequest, "_parent", "location=no");

    }
    @Override
    public void onError(Request request, Throwable exception) {
        MessageBox.alert("Request error","The page doesn't open", null);
    }
});



Собственно первый вопрос как и когда открывается вышеописанное окошко "Открыть/Сохранить" в браузерах?

И как использовать для открытия файла только один POST
запрос?


P.S. Для файла Excel диалоговое окно c "Открыть/Сохранить" выскакивает всегда, а для pdf файла открытие происходит автоматически без вызова диалогового окна
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как вызвать диалоговое окно с "Открыть/Сохранить" файл только через doPOST()? / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]