Java将文件输出到屏幕

Java将文件输出到屏幕,java,file-io,Java,File Io,我知道这有点宽泛,但情况是这样的: 我正在使用JSP和Java。我的服务器上有一个文件。我想在屏幕上添加一个链接,当单击该链接时,将打开文件供用户查看。该文件可以显示在web浏览器的窗口中,也可以弹出打开该文件所需的程序(类似于将iText输出到屏幕时,Adobe将在屏幕上打开以显示该文件)。我已经知道我的输出流了,但是如何将文件写入输出流?我读到的大部分内容只涉及文本文件,但我可能也涉及图像文件等 感谢您的帮助! 谢谢 您需要创建一个“下载”servlet,该servlet使用正确的mime类

我知道这有点宽泛,但情况是这样的:

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

感谢您的帮助!
谢谢

您需要创建一个“下载”servlet,该servlet使用正确的mime类型将文件写入响应输出流。在.jsp文件中无法可靠地执行此操作


我们通常使用一个“下载servlet”,将servlet映射设置为/downloads,然后附加路径信息以标识要服务的资产。servlet验证请求是否有效,设置mime头,然后将文件传递到输出流。这很简单,但在执行此操作时,请将J2EE javadocs放在手边。

您需要创建一个“下载”servlet,该servlet使用正确的mime类型将文件写入响应输出流。在.jsp文件中无法可靠地执行此操作


我们通常使用一个“下载servlet”,将servlet映射设置为/downloads,然后附加路径信息以标识要服务的资产。servlet验证请求是否有效,设置mime头,然后将文件传递到输出流。这很简单,但在进行此操作时,请将J2EE javadocs放在手边。

您需要向响应中添加某些字段。对于文本/csv,您需要执行以下操作:

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

这里有一个关于它的论坛。

您需要在响应中添加某些字段。对于文本/csv,您需要执行以下操作:

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

这里有一个关于它的论坛。

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

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();
}

下面是一个简单的实现方法:

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();
}