Java将文件输出到屏幕

时间:2009-07-16 20:51:37

标签: java file-io

我知道这有点宽泛,但情况如下:

我正在使用JSP和Java。我的服务器上有一个文件。我想添加一个指向屏幕的链接,当单击该链接时,将打开该文件供用户查看。该文件可以显示在Web浏览器的窗口中,也可以弹出打开文件所需的程序(类似于使用iText输出到屏幕时,Adobe打开以显示文件)。我已经知道我的输出流了,但是如何将文件写入输出流?我读过的大部分内容只涉及文本文件,但我也可能正在处理图像文件等。

任何帮助表示赞赏! 谢谢!

3 个答案:

答案 0 :(得分:2)

您需要在响应中添加某些字段。对于text / csv,你可以这样做:

 response.setContentType("text/csv"); // set MIME type 
 response.setHeader("Content-Disposition", "attachment; filename=\"" strExportFileName "\"");

这是sun关于它的论坛。

答案 1 :(得分:1)

您需要创建一个'download'servlet,它将文件写入具有正确mime类型的响应输出流。您无法在.jsp文件中可靠地执行此操作。

我们通常使用'download servlet'来设置servletmapping到/ downloads,然后附加路径信息以识别要服务的资产。 servlet验证请求是否有效,设置mime头然后将文件传递到输出流。它很简单,但在执行时保持J2EE javadoc很方便。

答案 2 :(得分:1)

这是一个关于如何实现它的简单实现:

protected void doPost(final HttpServletRequest request,
        final HttpServletResponse response) throws ServletException,
        IOException {

    // extract filename from request
    // TODO use a whitelist to avoid [path-traversing][1]
    File file = new File(getFileName(request));
    InputStream input = new FileInputStream(file);

    response.setContentLength((int) file.length());
    // TODO map your file to the appropriate MIME
    response.setContentType(getMimeType(file));

    OutputStream output = response.getOutputStream();
    byte[] bytes = new byte[BUFFER_LENGTH];
    int read = 0;
    while (read != -1) {
        read = input.read(bytes, 0, BUFFER_LENGTH);
        if (read != -1) {
            output.write(bytes, 0, read);
            output.flush();
        }
    }

    input.close();
    output.close();
}