package com.web.day2.response;
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;
/*
* 下载文件 解决下载中文名称文件时的乱码问题
*
*
* */
public class ResponseDemo3 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String path = this.getServletContext().getRealPath("/download/美女.jpg");
//System.out.println(path);
String filename = path.substring(path.lastIndexOf("\\")+1);
String filenamedisplay = URLEncoder.encode(filename, "utf-8");
if ("FF".equals(getBrowser(request))) {
// 针对火狐浏览器处理方式不一样了
filenamedisplay = new String(filename.getBytes("UTF-8"),
"iso-8859-1");
}
response.setHeader("content-disposition","attachment;filename="+filenamedisplay);
InputStream in = new FileInputStream(path);
OutputStream out = response.getOutputStream();
int len=0;
byte[] b = new byte[1024];
while((len = in.read(b))>0){
out.write(b, 0, len);
}
}
// 以下为服务器端判断客户端浏览器类型的方法
private String getBrowser(HttpServletRequest request) {
String UserAgent = request.getHeader("USER-AGENT").toLowerCase();
if (UserAgent != null) {
if (UserAgent.indexOf("msie") >= 0)
return "IE";
if (UserAgent.indexOf("firefox") >= 0)
return "FF";
if (UserAgent.indexOf("safari") >= 0)
return "SF";
}
return null;
}
}
servlet设置头文件header的方式下载文件
最新推荐文章于 2023-03-06 14:59:14 发布