我正在尝试向我的网络应用程序添加一个功能,让用户可以下载一个 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
而 .xlsx
是 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.
此外,我建议在写入输出流之前执行 response.reset()
,在关闭 之前执行
。responseOutputStream.flush()
(重要) >响应
关于Java HttpServlet如何下载excel文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26611424/