您的位置:首页 > 其它

servlet实现文件下载

2010-05-22 23:25 232 查看
servlet实现文件下载的原理很简单,从输入流读进来,写进输出流,这里的输出流当然就是response.getOutputStream();,而输入流是要下载的文件,不管这个文件放在哪里

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class FileDownloadServlet
*/
public class FileDownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public FileDownloadServlet() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try{
String fileName = request.getParameter("filename");
fileName = new String(fileName.getBytes("iso8859-1"), "gb2312");
response.setContentType("application/x-msdownload");
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("gb2312"), "iso8859-1"));
bis = new BufferedInputStream(new FileInputStream(new File("F://TDDOWNLOAD//" + fileName)));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
while(-1 != (bis.read(buff, 0, buff.length))) {
bos.write(buff);
bos.flush();//此处如果不用flush()方法则下载速度很慢,反之很快
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(bis != null){
bis.close();
}
if(bos != null){
bos.close();
}
}

}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: