java 下载文件 (包括单个和多个文件一起下载)

选择单个文件,直接下载。选择多个文件,先对文件进行打包,然后再下载压缩包。

public void filesDown(HttpServletRequest request,HttpServletResponse response,String idstr) throws IOException {
		ArrayList<String> lst = new ArrayList<String>();				
		int id = 0;
		String sql = "";
		ResultSet rs = null;
		String fileRoute = "";
		String fileName = "";
		String[] idsArr = idstr.split(",");
		DBHelp dbHelp = new DBHelp("sde");	
		com.cld.util.DBUtil dbUtil = new com.cld.util.DBUtil();
		String path = dbUtil.getPropValue("updatepath");
		//String XZQ = dbUtil.getPropValue("configXZQDM");
		//压缩zip文件临时存放路径		
		if(idsArr.length>1){			
			String zipPath = path + "zipFile\\";	
			//创建压缩文件临时文件夹		
			File fileExists = new File(zipPath);
			fileExists.mkdirs();
			for(int i=0;i<idsArr.length;i++){
				id = Integer.parseInt(idsArr[i]);
				sql = "select * from sde.GHWJFiles where id=" + id;
				rs = dbHelp.select1(sql);
				try {
					while (rs.next()) {
						fileRoute = path + rs.getString("FileType") + "\\" + rs.getString("XZQDM") + "\\" + rs.getString("FileName")+"."+rs.getString("ext");
						fileName = rs.getString("FileName")+"."+rs.getString("ext");						
					}
					lst.add(fileRoute);
				} catch (SQLException e) {
					e.printStackTrace();
				}			
			}			 
			com.cld.util.addZip addZip = new com.cld.util.addZip();
			//返回压缩文件名称
			fileName = addZip.zddZip(lst,zipPath);  
        	//压缩文件完整路径
			fileRoute = zipPath + fileName; 
		}else{			
			id = Integer.parseInt(idstr);
			sql = "select * from sde.GHWJFiles where id=" + id;
			rs = dbHelp.select1(sql);
			try {
				while (rs.next()) {
					fileRoute = path + rs.getString("FileType") + "\\" + rs.getString("XZQDM") + "\\" + rs.getString("FileName")+"."+rs.getString("ext");
					fileName = rs.getString("FileName")+"."+rs.getString("ext");
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		// 创建file对象
		File file = new File(fileRoute);
		// 设置response的编码方式
		response.setContentType("application/x-msdownload");
		// 写明要下载的文件的大小
		response.setContentLength((int) file.length());
		// 解决中文乱码
		response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("gbk"), "iso-8859-1"));
		// 读出文件到i/o流
		FileInputStream fis = new FileInputStream(file);
		BufferedInputStream buff = new BufferedInputStream(fis);
		byte[] b = new byte[1024];
		// 相当于我们的缓存
		long k = 0;
		// 该值用于计算当前实际下载了多少字节
		// 从response对象中得到输出流,准备下载
		OutputStream myout = response.getOutputStream();
		// 开始循环下载
		while (k < file.length()) {
			int j = buff.read(b, 0, 1024);
			k += j;
			// 将写入到客户端的内存的数据,刷新到磁盘
			myout.write(b, 0, j);
		}		
	}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值