• 文件下载


    package com.itcsl.web.dpwnload;
    
    import com.itcsl.web.utils.DownLoadUtils;
    
    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;
    
    @WebServlet("/dpwnloadServlet")
    public class dpwnloadServlet extends HttpServlet {
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
    		//1.获取请求参数
    		String filename = request.getParameter("filename");
    		//2.使用字节输入流加载文件进内存
    		//2.1找到问价按的服务器路径
    		ServletContext context = this.getServletContext();
    		String realPath = context.getRealPath("/img/" + filename);
    		//2.2用字节流关联
    		FileInputStream file = new FileInputStream(realPath);
    		//3设置response的响应头
    		//3.1设置响应头类型
    		String mimeType = context.getMimeType(filename);
    		response.setHeader("content-type",mimeType);
    		//3.2设置响应头打开方式,content-disposition
    
    		//解决中文文件名问题
    		//1.获取user-age请求头
    		String agent = request.getHeader("user-agent");
    		//2.使用工具类方法编码文件名即可
    		filename = DownLoadUtils.getFileName(agent, filename);
    
    		response.setHeader("content-disposition","attachment;filename="+filename);
    
    		//4.输入流的数据写出输出流
    		ServletOutputStream outputStream = response.getOutputStream();
    		byte[] bytes = new byte[1024];
    		int len=0;
    		while((len=file.read(bytes))!=-1){
    			outputStream.write(bytes,0,len);
    		}
    
    		file.close();
    		outputStream.close();
    	}
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		this.doPost(request,response);
    	}
    }
    
    

    工具类Utils

    package com.itcsl.web.utils;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.Base64;
    
    
    public class DownLoadUtils {
        public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {
            if (agent.contains("MSIE")) {
                // IE浏览器
                filename = URLEncoder.encode(filename, "utf-8");
                filename = filename.replace("+", " ");
            } else if (agent.contains("Firefox")) {
                // 火狐浏览器
                Base64.Encoder encoder = Base64.getEncoder();
                filename = "=?utf-8?B?" + encoder.encode(filename.getBytes("utf-8")) + "?=";
            } else {
                // 其它浏览器
                filename = URLEncoder.encode(filename, "utf-8");
            }
            return filename;
        }
    }
    

    html页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Title</title>
    </head>
    <body>
    <a href="/day15/dpwnloadServlet?filename=1.jpg">图片1</a>
    <a href="/day15/dpwnloadServlet?filename=二.jpg">图片2</a>
    </body>
    </html>
    
    每个人都是在努力的路上,别因为别人的误解而放弃,,术业有专攻,如是而已。
  • 相关阅读:
    Python列表及元组操作
    Python内建函数
    Python字符串相关
    检测浏览器是否安装FLASH插件
    瀑布流源码
    addEventListener 简析
    半角占一个字符,全角占两个字符
    替换class名
    正则表达式 验证是否全是空格
    图片旋转
  • 原文地址:https://www.cnblogs.com/16699qq/p/13551874.html
Copyright © 2020-2023  润新知