zoukankan      html  css  js  c++  java
  • 文件下载

    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>
    
    每个人都是在努力的路上,别因为别人的误解而放弃,,术业有专攻,如是而已。
  • 相关阅读:
    关于AFNetworking访问网络超时的设置
    【iOS程序启动与运转】- RunLoop个人小结
    iOS开发中常用到的加密方式
    iOS开发路线简述
    iOS中多线程的实现方案
    HTTP原理
    浅析无线定位技术
    iOS-MVVM设计模式
    打造强大的BaseModel(1):让Model自我描述
    介绍一个基于jQuery的Cookie操作插件
  • 原文地址:https://www.cnblogs.com/16699qq/p/13551874.html
Copyright © 2011-2022 走看看