有两种方式,一种是流,一种是用RequestDispatcher。
后一种由于getServletContext().getRequestDispatcher方法只接收字符(这里用文件相对路径),数据库文件写出还是用流方式更为合适。
//
先设置头与内容
response.setContentType( " application/x-download " );
response.setHeader( " Content-Disposition " , " attachment;filename=SomeFileName " );
// 设置输入流(可以是文件,数据库数据等),缓冲区,用循环读入流数据到缓冲中,并写出到response输出流
FileInputStream fis = new FileInputStream( new File( " x:/path/file " ));
byte [] buffer = new byte [ 1024 ];
int length;
while ((length = fis.read(buffer)) > 0 ) ... {
response.getOutputStream().write(buffer, 0, length);
if(length < 1024)
break;
}
// 记得关闭
response.getOutputStream().flush();
response.getOutputStream().close();
response.setContentType( " application/x-download " );
response.setHeader( " Content-Disposition " , " attachment;filename=SomeFileName " );
// 设置输入流(可以是文件,数据库数据等),缓冲区,用循环读入流数据到缓冲中,并写出到response输出流
FileInputStream fis = new FileInputStream( new File( " x:/path/file " ));
byte [] buffer = new byte [ 1024 ];
int length;
while ((length = fis.read(buffer)) > 0 ) ... {
response.getOutputStream().write(buffer, 0, length);
if(length < 1024)
break;
}
// 记得关闭
response.getOutputStream().flush();
response.getOutputStream().close();
在下载文件名为中文名时此函数会出问题。将文件名用URLEncode.encode处理过后正常。不知道直接设置编码为utf-8是否也行。