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();

	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值