java 后台接收 form 下载文件

11 篇文章 0 订阅
@RequestMapping(value = "/downloadExeclTemp", method = RequestMethod.POST)
	@ResponseBody
	public void downloadExeclTemp(HttpServletRequest request, HttpServletResponse response,@RequestParam(value="id")String id,@RequestParam(value="name")String name) {
		try {
			String filePath = this.getRequest().getServletContext().getRealPath("\\") + "path.xlsx";
			String outFileName = "pd-"+System.currentTimeMillis()+ ".xlsx";
			InputStream is = null;
			File outfile = null;
			OutputStream os = null;
			// 下载文件
			try {
				outfile = new File(filePath);
				is = new BufferedInputStream(new FileInputStream(filePath));
				// 设置输出的格式
				response.setContentType("text/html;charset=UTF-8");
				request.setCharacterEncoding("UTF-8");
				response.reset(); // 重置结果集
				String header = request.getHeader("User-Agent").toUpperCase();
				// 针对IE或者以IE为内核的浏览器:
				if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
					outFileName = URLEncoder.encode(outFileName, "utf-8");
					outFileName = outFileName.replace("+", "%20"); // IE下载文件名空格变+号问题
				} else {
					// 非IE浏览器的处理
					outFileName = new String(outFileName.getBytes(), "ISO8859-1");
				}
				response.addHeader("Content-Disposition",
						"attachment;filename=" + new String(outFileName.replaceAll(" ", ""))); // 返回头文件名
				response.addHeader("Content-Length", "" + outfile.length()); // 返回头
																				// 文件大小
				response.setContentType("application/octet-stream"); // 设置数据种类
				// 循环取出流中的数据
				byte[] buffer = new byte[1024];
				int len;
				while ((len = is.read(buffer)) > 0) {
					response.getOutputStream().write(buffer, 0, len);
				}
				// 获取返回体输出权
				os = new BufferedOutputStream(response.getOutputStream());
				os.write(buffer); // 输出文件
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					if (os != null) {
						os.flush();
						os.close();
					}
					if (is != null) {
						is.close();
					}
				} catch (Exception e2) {
					e2.printStackTrace();
				} 
			}
		} catch (Exception e) {
			logger.error("下载 "+name+" 模板文件-出错",e);
			e.printStackTrace();
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值