网页实现文件打包下载
前段时间收到需要批量下载文件的需求。一开始是做一个把所有需要下载的文件复制到粘贴板这样就可以去迅雷或者其他下载软件批量下载,但是这样还是不能满足用户的需求。
用户希望一点击就把所有需要下载的文件压缩成一个包后只需下载一次即可。这样整个功能就需要重新更改了。
于是思路改成用户在选择需要下载的文件之后由前端把所有需要下载的连接发送至后端,后端接收到请求后,在把所有文件压缩并生成一个压缩包,存放到临时目录后把目录连接在回传给前端即可以下载。
前端用jquery先获取所有勾选的行,并且拿到选中行对应要下载的文件连接,存放到一个数组里面。再用ajax异步发送数组到后端。
前端代码:
$.ajax({
url: "/Home/GetPackageDownLink", //后端接口地址
data: { DownLinkList: JSON.stringify(copyConten) }, //把需要发送的文件连接转为json数组
type: "post",
dataType: "json",
success: function (data) {
if (data.code == 1) {
var link = document.createElement('a');//创建一个a标签,用来模拟点击下载
link.href = data.message;//message是后端传回来的下载地址
var reportNo = GetSelectFirstReportNo();//获取第一个文件名,用来更改下载的文件名
link.setAttribute("download", reportNo + "等报告书打包文件");//更改文件夹
link.click();//弹出下载
}
}
});
后端关键代码:(这里是用c#,当然可以用其他语言实现。)
var finalTarget = Path.Combine(targetDire, newNo + ".zip");//生成存放打包文件的目录
//压缩文件
ZipFiles(newDownLinkList, finalTarget, null);//newDownLinkList为需要下载的连接
result = TargetFileName; //打包完成后返回打包文件的连接地址
这里还有一点不完美就是改不了 下载的文件名待后面解决。