загрузка файла с использованием RequestBuilder из gwt - PullRequest
0 голосов
/ 15 декабря 2010

Мне нужно осуществить загрузку файлов. Я не хочу давать какие-либо URL-адреса файлов на стороне сервера для прямой загрузки. Я создал сервлет, который откроет файл и запишет его в поток ответа. (Запрос запроса, Ответный ответ), который будет вызываться при получении ответа. Теперь, как действовать дальше? Моя операция обязательна, файл в потоке должен быть загружен на клиентский компьютер.

Можно ли мне помочь с этим?

Ответы [ 3 ]

2 голосов
/ 17 декабря 2010

Вы можете использовать любой из _blank, _parent, _top, _self

  • Атрибут "_ blank" вызывает «цель» гиперссылки, чтобы открыть в новый
  • Атрибут «_ top» вызывает «цель» гиперссылки для отображения на верхний уровень всех определенных на данный момент фреймовой структуры.
  • Атрибут "_ parent" вызывает «цель» гиперссылки для отображения во всей области текущего фреймы.
  • Атрибут «_ self» вызывает «цель» гиперссылки, чтобы открыть в текущий кадр.

Источник

2 голосов
/ 15 декабря 2010

Вы пробовали Window.open(ServletUrl, "_parent", "location=no")?

И попробуйте установить ContentType в ответ на "application / exe"

Это предложит пользователю сохранить или запустить.

Код сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
    File file = new File("/path/to/files", filename);
    response.setContentType("application/x-download");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename);
    response.setHeader("Content-Length", file.length());

    BufferedInputStream input = null;
    BufferedOutputStream output = null;

    try {
        input = new BufferedInputStream(new FileInputStream(file));
        output = new BufferedOutputStream(response.getOutputStream());

        byte[] buffer = new byte[8192];
        for (int length = 0; (length = input.read(buffer)) > 0;) {
            output.write(buffer, 0, length);
        }
    } finally {
        if (output != null) try { output.close(); } catch (IOException ignore) {}
        if (input != null) try { input.close(); } catch (IOException ignore) {}
    }
}
0 голосов
/ 04 января 2013

Вы можете сделать это без сервлета, используя только GWT RPC и URI данных :

  1. Заставьте ваш метод GWT RPC возвращать содержимое файла или данные для создания файла.
  2. На стороне клиента отформатируйте URI данных с полученным содержимым файла или сгенерируйте содержимое данных.
  3. Используйте Window.open, чтобы открыть диалоговое окно сохранения файла с передачей отформатированного DataURI .

Взгляните на эту ссылку, чтобы понять использование данных URI :

Экспорт в CSV в JQuery

...