奇怪的servlet响应问题

时间:2013-07-03 08:46:24

标签: java servlets download response

我有一个servlet女巫正在生成一个.xls文件,然后它将生成的文件发送给用户下载,代码如下:

// Write the output to a file
Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter= 
new SimpleDateFormat("yyyy_MMM_dd");
String dateNow = formatter.format(currentDate.getTime());

String path = "webapps/myapp/exports/";
String fileName = ("Table_export_"+ dateNow + ".xls");

FileOutputStream fileOut = new FileOutputStream(path+fileName);
wb.write(fileOut);
fileOut.close();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);

文件保存在服务器上,大小为5 kb,但在浏览器对话框之后,选择保存或打开后,文件为空,大小为0 kb。我无法理解什么是错的。

我正在与这个问题作斗争大约2个小时而没有成功。我试图设置完整的路径:

response.setHeader("Content-Disposition","attachment;filename="path+fileName);

但是我得到了一个名字很奇怪的文件,它也是0 kb。

我很确定我错过了一些非常小的东西,但作为一名初级开发人员,我仍然无法弄明白。

2 个答案:

答案 0 :(得分:2)

由于您已经有了一个可以将文件写入输出流的方法,您可以通过这种方式更改代码以将其发送给用户:

Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MMM_dd");
String dateNow = formatter.format(currentDate.getTime());

String fileName = ("Table_export_"+ dateNow + ".xls");

response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition","attachment;filename="+fileName);

OutputStream outputStream = response.getOutputStream();
try {
    wb.write(outputStream);
} finally {
    outputStream.close();
}

但它不会保存在您的服务器硬盘上。

方法HttpServletResponse#getOutputStream()允许您访问将发送回客户端的字节流。

答案 1 :(得分:0)

当您使用格式 -

String path = "webapps/myapp/exports/";
String fileName = ("Table_export_"+ dateNow + ".xls");
...
response.setHeader("Content-Disposition","attachment;filename="path+fileName);

文件名是“webapps%2Fmyapps%2Fexports%2fTable_export _.... xls”?

因为你没有在文件中添加任何数据

,所以文件大小将为零