有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何通过servlet打开Excel文件

我用过jxls。jar库将数据导出为excel格式并存储在带有*的文件中。xls格式。 在使用servlet完成文件写入过程后,如何打开或升级对话框以打开或保存此文件 写入文件的所有过程在单独的函数中完成


共 (4) 个答案

  1. # 1 楼答案

    这段代码应该对您有所帮助。当您在IE浏览器中以内联方式提供内容配置时,它将以内联方式打开excel,而不提示对话框

    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition","inline;fileName=" + fileName);
    final java.io.OutputStream os = response.getOutputStream();
    

    调用createExcel函数传递OutputStream对象

     
    os.flush();
    os.close();
    
  2. # 2 楼答案

    添加标题内容处置:附件

  3. # 3 楼答案

    我知道您将Excel文件作为File对象,并且希望将其作为下载提供给客户端。您需要将Content-Disposition头设置为attachment,以便客户端显示另存为对话框。您还需要设置Content-Type头,让客户机知道它是什么文件类型,以便最终能够将正确的应用程序与之关联,以防最终用户希望立即打开它。最后,最好设置Content-Length头,因为它提高了服务性能(否则Servlet API将退回到需要更多字节和处理时间的分块编码)

    在设置了正确的头之后,只需以通常的Java IO方式将InputStreamFile写入HttpServletResponseOutputStream即可

    private static final int DEFAULT_BUFFER_SIZE = 8192; // 8KB.
    // ...
    
    File file = createExcelFileSomehow();
    // ...
    
    response.reset();
    response.setBufferSize(DEFAULT_BUFFER_SIZE);
    response.setHeader("Content-Type", "application/vnd.ms-excel");
    response.setHeader("Content-Length", String.valueOf(file.length()));
    response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
    
    BufferedInputStream input = null;
    BufferedOutputStream output = null;
    
    try {
        input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
        output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
    
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        for (int length; (length = input.read(buffer)) > -1;) {
            output.write(buffer, 0, length);
        }
    } finally {
        if (output != null) try { output.close(); } catch (IOException ignore) {}
        if (input != null) try { input.close(); } catch (IOException ignore) {}
    }
    
  4. # 4 楼答案

    您是否询问如何将文件发送给用户

    这可能有帮助:Servlet for serving static content

    然后,只需从用于表示的任何内容创建一个指向servlet的HTML链接