Java HttpServlet如何下载excel文件

标签 java excel http servlets download

我正在尝试向我的网络应用程序添加一个功能,让用户可以下载一个 excel 文件。

我正在尝试使用以下代码实现此目的:

@Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        File file = new File("d:/test/test.xls");
        response.setContentType("application/xls");
        response.addHeader("Content-Disposition", "attachment; filename=test.xls");
        response.setContentLength((int) file.length());

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            OutputStream responseOutputStream = response.getOutputStream();
            int bytes;
            while ((bytes = fileInputStream.read()) != -1) {
                responseOutputStream.write(bytes);
            }
            fileInputStream.close();
            responseOutputStream.close();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我可以使用上面的代码下载 excel 文件,但是文件已损坏。如果我用 Microsoft Excel 打开它,我会弹出一个消息:

“文件格式和扩展名不匹配。文件可能已损坏或不安全”。

Excel 文件是空的。

运行代码后,原始文件 (d:/test/test.xls) 也被损坏。

我做错了什么?

最佳答案

Excel 文件 .xls 的官方 MIME 类型是 application/vnd.ms-excel.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet.

此外,我建议在写入输出流之前执行 response.reset(),在关闭 之前执行 responseOutputStream.flush()(重要) >响应

关于Java HttpServlet如何下载excel文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26611424/

相关文章:

java - OOP 设计 - 需要准备每个方法调用并在之后清理

java - 使用 while 循环迭代枚举

python - 如何使用python将列表列表写入excel?

excel - 我应该如何使我的 VBA 代码与 64 位 Windows 兼容?

rest - 如何在 HTTP DELETE 请求中传递额外参数?

带有 header 和其他字段的 Flutter Multipart Request

apache - 避免 304(未修改)响应

java - 仅使用外部 ID 的 Hibernate 一对一映射

java - Spring MVC/Maven 中的注释不起作用

Excel now() 不应更新现有时间戳