用servlet实现了一个小小的文件下载,主要步骤是:
1获取要下载的文件
2定义Response的文件头,例如文件名/文件类型/长度之类
3用InputStream读取文件,并转成ServletOutputStream输出
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("service");
//获取要下载的文件
File downloadFile = new File(req.getSession().getServletContext().getRealPath("").toString() + "/id");
//获取文件长度
Long length = downloadFile.length();
//设置下载文件的格式,此处为vcard
resp.setContentType("text/x-vcard");
//添加文件长度的值,作用尚不明确
resp.setContentLength(length.intValue());
//添加响应报头,下载文件的名称由filename定义
resp.addHeader("Content-Disposition", "attachment; filename=contact");
if (!downloadFile.exists()) {
System.out.println("DownloadServlet: download file dose not exist");
return;
}
ServletOutputStream sos = resp.getOutputStream();
//将文件转成字节流输入
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(downloadFile));
int size = 0;
byte[] b = new byte[4096];
//每次读取4个字节,并写入输出流之中
while ((size = bis.read(b)) != -1) {
sos.write(b, 0, size);
}
sos.flush();
sos.close();
bis.close();
}
参考文章:http://www.cnblogs.com/windlaughing/archive/2013/04/22/3036148.html