【JavaScript】WEB页面纯JS实现批量下载文件为压缩包
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
有一个需求,是列表里面有很多图片或者pdf文件的url,用户想要一个批量下载,点击按钮后,把列表的这些文件全部都下载下来,并且是一个压缩包,包里面包含那些url对应的文件。 1. <!doctype html> 2. <html lang="en"> 3. <head> 4. <meta charset="UTF-8"> 5. <title>doc</title> 6. </head> 7. <body> 8. <button onclick='packageImages()'>批量下载</button> 9. 10.<!-- 下面是需要用到的js --> 11.<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script> 12.<script src="https://cdn.staticfile.org/jszip/3.10.1/jszip.min.js"></script> 13.<script src="https://cdn.staticfile.org/FileSaver.js/2.0.5/FileSaver.min.js"></script> 14.<script src="https://cdn.staticfile.org/axios/1.2.0/axios.min.js"></script> 15. 16.<script> 17. function packageImages() { 18. var imgsSrc = ['https://img-home.csdnimg.cn/images/20201124032511.png', 'https://csdnimg.cn/medal/qixiebiaobing4@240.png']; // 这里可以替换为自己的逻辑,比如从哪里获取之类的 19. 20. var promises =[] 21. const zip = new JSZip(); 22. for(let item of imgsSrc){ 23. let axios = getFile(item).then(({data})=>{ 24. let fileName = getFileName(item) //文件名 25. zip.file(fileName, data, {binary: true}); 26. }) 27. promises.push(axios) 28. } 29. 30. Promise.all(promises).then(() => { 31. if (Object.keys(zip.files).length > 0) { 32. zip.generateAsync({type: 'blob'}).then((blob) => { 33. saveAs(blob, 'files.zip'); 34. console.log('批量下载成功') 35. }); 36. } else { 37. console.log('下载全部失败') 38. } 39. }); 40. } 41. 42. function getFileName(filePath){ 43. var startIndex = filePath.lastIndexOf("/"); 44. if(startIndex != -1) 45. return filePath.substring(startIndex+1, filePath.length).toLowerCase(); 46. else return ""; 47. } 48. 49. function getFile(url){ 50. return new Promise((resolve, reject) => { 51. axios({ 52. url, 53. method: 'GET', 54. responseType: 'blob', 55. }) 56. .then((data) => { 57. resolve(data); 58. }) 59. .catch((err) => { 60. reject(err.toString()); 61. }); 62. }); 63. } 64.</script> 65.</body> 66.</html> 该文章在 2023/8/24 21:47:05 编辑过 |
关键字查询
相关文章
正在查询... |