package com.ruandy.servlet.download;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = "中文.jpg";
//浏览器下载时中文存在乱码
//需要进行编码
//客户端浏览器信息
String userAgent = request.getHeader("User-Agent");
//filename = DownLoadUtils.getFileName(agent,filename);
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
filename = java.net.URLEncoder.encode(filename, "UTF-8");
} else {
// 非IE浏览器的处理:
filename = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
}
//设置响应头,让浏览器下载
//attachment:附件,filename文件名
resonse.setHeader("Content-disposition","attachment;filename="+filename);
//用ServletContext的getRealPath方法得到该图片在部署项目中的绝对位置
//因为服务器的位置不固定,所以要动态的获取图片的路径
ServletContext ctx = request.getServletContext();
String realPath = ctx.getRealPath("/WEB-INF/img/图片.jpg");
//System.out.println(realPath);
//创建输入流
InputStream is = new FileInputStream(realPath);
//响应字节流
ServletOutputStream os = response.getOutputStream();
int data;
while((data=is.read())!=-1){
os.write(data);
}
}
}
文件下载
最新推荐文章于 2022-11-23 19:23:01 发布