package servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Utils.DownloadUtil;
/**
* Servlet implementation class demo3
*/
public class demo3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 获取要下载的文件名字 例如aa.jpg --- inputStream
String fileName = request.getParameter("filename");
// 解决get请求中有中文
fileName = new String(fileName.getBytes("ISO-8859-1"), "UTF-8");
// 2. 获取这个文件在tomcat里面的绝对路径地址
String path = getServletContext().getRealPath("download/" + fileName);
/**
*解决下载文件时显示的中文问题
* ie 或者google使用 URLEncoder
* 火狐用 base64
*/
//读取消息头 判断浏览器类型
String clienrType = request.getHeader("User-Agent");
if (clienrType.contains("Firefox")) {
fileName = DownloadUtil.base64EncodeFileName(fileName);
} else {
fileName = URLEncoder.encode(fileName, "UTF-8");
}
// 让浏览器收到这份资源的时候, 以下载的方式提醒用户,而不是直接展示。
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 3. 转化成输入流
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
os.close();
is.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
package servlet;
import java.io.FileInputStream