Java Servlet下载文件的代码如下:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
public class ExcelServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response){
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response){
try{
String path = "D:\\GeoInfoService_List\\GeoInfoService\\web\\file\\template.xls";
File f = new File(path);
response.setHeader("Content-disposition", "attachment; filename=output.xls");// 设定输出文件头
response.setContentType("application/x-msdownload");
OutputStream os = response.getOutputStream();
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
byte data[] = new byte[1024];
int length = -1;
while((length = bis.read(data)) != -1){
os.write(data,0,length);
}
bis.close();
os.flush();
os.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
不要在os上再包一层BufferdOutputStream用它来write,这样会导致下载的文件比实际的文件小,导致文件流部分丢失,文件损坏无法打开。