文件下载~

var myform = $("<form></form>");
myform.attr('method','post');
myform.attr('action',BASEPATH + "ceshi/downloadExcel");
var fileName = $("<input type='hidden' name='fileName' />")
fileName.attr('value', "test.xlsx");
//fileName.attr('value', path + "," + file);
myform.append(fileName);
myform.appendTo('body').submit();
//图片下载
public void downloadSingle(HttpServletRequest request, HttpServletResponse response) throws IOException {
		
	String fileName = "a.png";
	
	String filePath = "E:\\util\\"+fileName;
	// 读到流中
	InputStream inStream = new FileInputStream(filePath);// 文件的存放路径
	// 设置输出的格式
	response.reset();
	response.setContentType("bin");
	response.setContentType("application/octet-stream; charset=utf-8");
	
	fileName = URLEncoder.encode(fileName, "UTF-8");
	if (fileName.length() > 150) {  	
		String guessCharset = "gb2312"; //根据request的locale 得出可能的编码,中文操作系统通常是gb2312  
		fileName = new String(fileName.getBytes(guessCharset), "ISO8859-1");   
	}  
	response.setHeader("Content-Disposition", "attachment; filename=" + fileName);  
	
	// 循环取出流中的数据
	byte[] b = new byte[100];
	int len;
	try {
		while ((len = inStream.read(b)) > 0)
			response.getOutputStream().write(b, 0, len);
		inStream.close();
	} catch (IOException e) {
		e.printStackTrace();
	}		
}

//excel下载
@ResponseBody
@RequestMapping(value = "/downloadExcel", method = RequestMethod.POST)
public void downloadExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
   	String fileName = request.getParameter("fileName");
   	String filePath = "E:\\util\\"+fileName;
    response.setCharacterEncoding("UTF-8");
    fileName = new String(fileName.getBytes("UTF-8"),"ISO8859-1");
    fileName = fileName.replaceAll("\\+", "%20");
    response.setHeader("Cache-control", "private");
    response.setHeader("Cache-Control", "maxage=3600");
    response.setHeader("Pragma", "public");
    response.setContentType("application/vnd.ms-excel");
    response.setContentType("application/octet-stream;charset=UTF-8;");
    response.setHeader("Accept-Ranges", "bytes");
    response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");
   
    ServletOutputStream out = response.getOutputStream();
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    try {
        bis = new BufferedInputStream(new FileInputStream(new File(filePath)));
        bos = new BufferedOutputStream(out);
        byte[] buff = new byte[2048];
        int bytesRead;
        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
            bos.write(buff, 0, bytesRead);
        }
    } catch (final IOException e) {
        throw e;
    } finally {
        if (bis != null)
            bis.close();
        if (bos != null)
            bos.close();
    }
}

//文件压缩下载
public static void downloadFile(List<String> nameList, HttpServletRequest request, HttpServletResponse response) {
	//响应头的设置
	response.reset();
	response.setCharacterEncoding("utf-8");
	response.setContentType("multipart/form-data");
	//设置压缩包的名字
	String downloadName = "测试.zip";
	//返回客户端浏览器的版本号、类型
	String agent = request.getHeader("USER-AGENT");  
	try {
		//针对IE或者以IE为内核的浏览器:  
		if (agent.contains("MSIE")||agent.contains("Trident")) {
			downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");
		} else {
			//非IE浏览器的处理:
			downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");
	
	//设置压缩流:直接写入response,实现边压缩边下载
	ZipOutputStream zipos = null;
	try {
		zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));
		zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法 
	} catch (Exception e) {
		e.printStackTrace();
	}

	//循环将文件写入压缩流
	DataOutputStream os = null;
	
   
	//遍历文件信息(主要获取文件名/文件路径等)
	for (String fileName : nameList) {
		//文件路径
		String filePath = "E:\\util\\" + "\\"+fileName;
		File file = new File(filePath);
		if (!file.exists()) {
			 throw new RuntimeException("文件已不存在");
		}else{
			try {
				//添加ZipEntry,并ZipEntry中写入文件流
				zipos.putNextEntry(new ZipEntry(fileName));
				os = new DataOutputStream(zipos);
				InputStream is = new FileInputStream(file);
				byte[] b = new byte[100];
				int length = 0;
				while((length = is.read(b))!= -1){
					os.write(b, 0, length);
				}
				is.close();
				zipos.closeEntry();
			} catch (IOException e) {
				e.printStackTrace();
			} 
		}
	}
	
	//关闭流
	try {
		os.flush();
		os.close();
		zipos.close();
	} catch (IOException e) {
		e.printStackTrace();
	} 
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值