import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Encoder;
/**
* Servlet implementation class DownLoadServlet
*/
public class DownLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.接收文件名
String fileName=request.getParameter("fileName");
fileName = new String(fileName.getBytes("iso-8859-1"),"utf-8");//设置文件名编码格式,否则资源请求中有中文会乱码
//获取下载绝对路径,下载文件存放在download目录中
String filePath=this.getServletContext().getRealPath("/download");
//打开文件
File file=new File(filePath, fileName);
//通知浏览器以下载的方式请求资源
//a.Content-Type 设置文件媒体格式
response.setContentType(this.getServletContext().getMimeType(fileName));
//查看请求头"User-Agent"以获取浏览器类型,并设置链接的编码方式
String header=request.getHeader("User-Agent");
if(header.contains("firefox")){
BASE64Encoder base64Encoder=new BASE64Encoder();
fileName="=?utf-8?"+base64Encoder.encode(fileName.getBytes("utf-8"))+"?=";
}else{
fileName=URLEncoder.encode(fileName,"utf-8");
}
//b.Content-Disposition 设置要被下载的文件名
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
//获取输入流
FileInputStream fis=new FileInputStream(file);
//获取输出流
ServletOutputStream sos=response.getOutputStream();
//设置缓冲区
byte []buffer = new byte[2048];
int len=0;
while((len=fis.read(buffer))!=-1){
sos.write(buffer,0,len);
}
fis.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
JavaWeb 下载文件Download
最新推荐文章于 2024-07-22 10:31:06 发布