选择单个文件,直接下载。选择多个文件,先对文件进行打包,然后再下载压缩包。
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);
}
}