web项目,文件下载的Servlet示例

mac2025-06-16  5

文件下载的Servlet

package com.web.servlet; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URLEncoder; 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 org.apache.commons.fileupload.util.mime.MimeUtility; import eu.bitwalker.useragentutils.UserAgent; /** * 文件下载 * @title DownloadServlet.java */ @WebServlet("/download") public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = -4891566202618309888L; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取下载文件的路径 String path = request.getSession().getServletContext().getRealPath("/upload"); //System.out.println(path); //String filename = "girl.jpg"; String fileName = "美女.jpg"; String encodedFileName = null; String userAgentString = request.getHeader("User-Agent"); String browser = UserAgent.parseUserAgentString(userAgentString).getBrowser().getGroup().getName(); // 根据浏览器的不同处理中文乱码 if(browser.equals("Chrome") || browser.equals("Internet Exploer") || browser.equals("Safari")) { // 设置下载头 encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\""); } else if (browser.equals("Firefox")) { // 设置下载头 encodedFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\""); } else if(browser.equals("Microsoft Edge")) { // 设置下载头 encodedFileName = URLEncoder.encode(fileName, "UTF-8"); response.setHeader("Content-Disposition", "attachment;fileName*=UTF-8'zh_cn'" + encodedFileName); } else { // 设置下载头 encodedFileName = MimeUtility.decodeText(fileName); response.setHeader("Content-Disposition", "attachment;fileName=\"" + encodedFileName + "\""); } // 创建输入流 FileInputStream is = new FileInputStream(new File(path, "girl.jpg")); // D:\software\Programer\Server\tomcat-8.5.34\webapps\web04\\upload\girl.jpg //new FileInputStream(path + "\\" + filename); // 创建输出流 ServletOutputStream os = response.getOutputStream(); byte[] b = new byte[1024]; int len; while((len = is.read(b)) != -1) { os.write(b, 0, len); } } }
最新回复(0)