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

    下载文件需要设置response的俩个响应头及输出流
             * 两个头一个流
             * 1. Content-Type:设置下载资源类型(MIME类型)
             * 2. Content-Disposition:下载框及下载文件名
             * 3. 流:下载文件的数据,文件流

    准备工作:需要导入 commons-io.jar包

    为了解决下载框弹出文件名的乱码问题,一般需要导入如下方法:

    	// 用来对下载的文件名称进行编码的!
    	public static String filenameEncoding(String filename, HttpServletRequest request) throws IOException {
    		String agent = request.getHeader("User-Agent"); //获取浏览器
    		if (agent.contains("Firefox")) {
    			BASE64Encoder base64Encoder = new BASE64Encoder();
    			filename = "=?utf-8?B?"
    					+ base64Encoder.encode(filename.getBytes("utf-8"))
    					+ "?=";
    		} else if(agent.contains("MSIE")) {
    			filename = URLEncoder.encode(filename, "utf-8");
    		} else {
    			filename = URLEncoder.encode(filename, "utf-8");
    		}
    		return filename;
    	}

    文件下载的具体步骤设置:

    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		response.setContentType("text/html;charset=utf-8");
    		/*
    		 * 两个头一个流
    		 * 1. Content-Type:下载资源类型
    		 * 2. Content-Disposition:下载框及下载文件名
    		 * 3. 流:下载文件的数据,文件流
    		 */
    		
    		String filename = "D:/音乐/韩红-天路.mp3";
    		
    		// 为了使下载框中下载文件名显示中文文件名称不出乱码!
    		String framename = filenameEncoding("流光%飞舞.mp3", request);
    		
    		//通过文件名称获取MIME类型
    		String contentType = this.getServletContext().getMimeType(filename);
    		
    		//设置下载框
    		String contentDisposition = "attachment;filename=" + framename;
    		
    		// 文件流
    		FileInputStream input = new FileInputStream(filename);
    		
    		//设置头
    		response.setHeader("Content-Type", contentType);
    		response.setHeader("Content-Disposition", contentDisposition);
    		
    		// 获取绑定了响应端的流
    		ServletOutputStream output = response.getOutputStream();
    		
    		IOUtils.copy(input, output);//把输入流中的数据写入到输出流中。
    		
    		input.close();
    
    	}
  • 相关阅读:
    初涉线性基
    Codechef December Challenge 2018 Division 2
    【贪心】bzoj1592: [Usaco2008 Feb]Making the Grade 路面修整
    请求库之requests
    爬虫基本原理
    Flask-SQLAlchemy
    虚拟环境
    自定义验证规则以及中间件简单介绍
    Form组件归类
    分页与中间件
  • 原文地址:https://www.cnblogs.com/MrQlyn/p/10236309.html
Copyright © 2011-2022 走看看