Загрузка файла Excel с сервера с помощью сервлетов - PullRequest
4 голосов
/ 14 мая 2010

У меня есть файл Excel на стороне сервера.Как я могу отобразить его в браузере на стороне клиента с помощью сервлетов?

Заранее спасибо.

1 Ответ

23 голосов
/ 14 мая 2010

Кстати, просто как-то получите InputStream (подходит FileInputStream) и запишите его в OutputStream ответа обычным Java IO способом. Это в основном все. Вам нужно только позаботиться о том, чтобы вы установили правильные заголовки ответа, чтобы браузер понимал, что с ним делать. Заголовок Content-Type сообщит веб-браузеру, что это за файл, чтобы браузер знал, какое приложение использовать для его открытия.

Вот начальный пример:

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.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));
    response.setHeader("Content-Length", file.length());
    response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");

    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) {}
    }
}

Отобразите этот сервлет в web.xml на url-pattern из /files/*, чтобы вы могли получить файл Excel с помощью http://example.com/contextname/files/filename.xls.

Если это на самом деле файл xlsx, который по умолчанию еще не распознается средним сервлетконтейнером (тогда ServletContext#getMimeType() будет возвращать application/octet-stream вместо желаемого xlsx типа содержимого), тогда вам нужно также добавьте следующую запись в web.xml:

<mime-mapping>
    <extension>xlsx</extension>
    <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>

Для более продвинутого примера файлового сервлета вы можете найти эту статью полезной, она также поддерживается при каждом возобновлении загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...