批量下载文件脚本
This commit is contained in:
		
							
								
								
									
										1
									
								
								batch-download/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								batch-download/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					# 文件批量下载工具
 | 
				
			||||||
							
								
								
									
										53
									
								
								batch-download/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								batch-download/index.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					const axios = require('axios');
 | 
				
			||||||
 | 
					const fs = require('fs');
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 示例图片 URL 数组
 | 
				
			||||||
 | 
					const imageUrls = [
 | 
				
			||||||
 | 
					    // 'https://example.com/image1.jpg',
 | 
				
			||||||
 | 
					    // 'https://example.com/image2.jpg',
 | 
				
			||||||
 | 
					    // 'https://example.com/image3.jpg',
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (let i = 1; i <= 100; i++) {
 | 
				
			||||||
 | 
					    imageUrls.push(`https://example.com/image${i}.jpg`)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 执行下载
 | 
				
			||||||
 | 
					downloadImages(imageUrls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 批量下载图片函数
 | 
				
			||||||
 | 
					async function downloadImages(urls) {
 | 
				
			||||||
 | 
					    for (const url of urls) {
 | 
				
			||||||
 | 
					        // const imageName = path.basename(url); // 获取图片名称
 | 
				
			||||||
 | 
					        const imageName = (imageUrls.indexOf(url) + 1) + '.jpg'; // 图片名称递增
 | 
				
			||||||
 | 
					        const imagePath = path.join(__dirname, 'downloads', imageName); // 图片保存路径
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            const response = await axios({
 | 
				
			||||||
 | 
					                method: 'get',
 | 
				
			||||||
 | 
					                url: url,
 | 
				
			||||||
 | 
					                responseType: 'stream', // 让 axios 直接返回图片流
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 确保下载目录存在
 | 
				
			||||||
 | 
					            if (!fs.existsSync(path.dirname(imagePath))) {
 | 
				
			||||||
 | 
					                fs.mkdirSync(path.dirname(imagePath), { recursive: true });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 将图片流写入本地文件
 | 
				
			||||||
 | 
					            const writer = fs.createWriteStream(imagePath);
 | 
				
			||||||
 | 
					            response.data.pipe(writer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            writer.on('finish', () => {
 | 
				
			||||||
 | 
					                console.log(`图片下载完成:${imageName}`);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            writer.on('error', (err) => {
 | 
				
			||||||
 | 
					                console.error(`下载图片失败:${imageName}`, err);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        } catch (err) {
 | 
				
			||||||
 | 
					            console.error(`下载图片出错:${url}`, err);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										97
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										97
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -9,6 +9,7 @@
 | 
				
			|||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "axios": "^1.7.9",
 | 
				
			||||||
        "chalk": "4.1.2",
 | 
					        "chalk": "4.1.2",
 | 
				
			||||||
        "cheerio": "^1.0.0-rc.12",
 | 
					        "cheerio": "^1.0.0-rc.12",
 | 
				
			||||||
        "crypto": "^1.0.1",
 | 
					        "crypto": "^1.0.1",
 | 
				
			||||||
@@ -183,11 +184,28 @@
 | 
				
			|||||||
      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
 | 
					      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/axios": {
 | 
					    "node_modules/axios": {
 | 
				
			||||||
      "version": "0.24.0",
 | 
					      "version": "1.7.9",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz",
 | 
				
			||||||
      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
 | 
					      "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "follow-redirects": "^1.14.4"
 | 
					        "follow-redirects": "^1.15.6",
 | 
				
			||||||
 | 
					        "form-data": "^4.0.0",
 | 
				
			||||||
 | 
					        "proxy-from-env": "^1.1.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/axios/node_modules/form-data": {
 | 
				
			||||||
 | 
					      "version": "4.0.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "asynckit": "^0.4.0",
 | 
				
			||||||
 | 
					        "combined-stream": "^1.0.8",
 | 
				
			||||||
 | 
					        "mime-types": "^2.1.12"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">= 6"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/bcrypt-pbkdf": {
 | 
					    "node_modules/bcrypt-pbkdf": {
 | 
				
			||||||
@@ -855,9 +873,16 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/follow-redirects": {
 | 
					    "node_modules/follow-redirects": {
 | 
				
			||||||
      "version": "1.15.2",
 | 
					      "version": "1.15.9",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
 | 
				
			||||||
      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
 | 
					      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
 | 
				
			||||||
 | 
					      "funding": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "type": "individual",
 | 
				
			||||||
 | 
					          "url": "https://github.com/sponsors/RubenVerborgh"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": ">=4.0"
 | 
					        "node": ">=4.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
@@ -1497,6 +1522,15 @@
 | 
				
			|||||||
        "node": ">=12"
 | 
					        "node": ">=12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/NeteaseCloudMusicApi/node_modules/axios": {
 | 
				
			||||||
 | 
					      "version": "0.24.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "follow-redirects": "^1.14.4"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/netmask": {
 | 
					    "node_modules/netmask": {
 | 
				
			||||||
      "version": "2.0.2",
 | 
					      "version": "2.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz",
 | 
				
			||||||
@@ -1766,6 +1800,12 @@
 | 
				
			|||||||
        "node": ">= 0.10"
 | 
					        "node": ">= 0.10"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/proxy-from-env": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
 | 
				
			||||||
 | 
					      "license": "MIT"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "node_modules/psl": {
 | 
					    "node_modules/psl": {
 | 
				
			||||||
      "version": "1.9.0",
 | 
					      "version": "1.9.0",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
 | 
				
			||||||
@@ -2650,11 +2690,25 @@
 | 
				
			|||||||
      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
 | 
					      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "axios": {
 | 
					    "axios": {
 | 
				
			||||||
      "version": "0.24.0",
 | 
					      "version": "1.7.9",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz",
 | 
				
			||||||
      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
 | 
					      "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "follow-redirects": "^1.14.4"
 | 
					        "follow-redirects": "^1.15.6",
 | 
				
			||||||
 | 
					        "form-data": "^4.0.0",
 | 
				
			||||||
 | 
					        "proxy-from-env": "^1.1.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "form-data": {
 | 
				
			||||||
 | 
					          "version": "4.0.1",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.1.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
 | 
				
			||||||
 | 
					          "requires": {
 | 
				
			||||||
 | 
					            "asynckit": "^0.4.0",
 | 
				
			||||||
 | 
					            "combined-stream": "^1.0.8",
 | 
				
			||||||
 | 
					            "mime-types": "^2.1.12"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "bcrypt-pbkdf": {
 | 
					    "bcrypt-pbkdf": {
 | 
				
			||||||
@@ -3186,9 +3240,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "follow-redirects": {
 | 
					    "follow-redirects": {
 | 
				
			||||||
      "version": "1.15.2",
 | 
					      "version": "1.15.9",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
 | 
				
			||||||
      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
 | 
					      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "forever-agent": {
 | 
					    "forever-agent": {
 | 
				
			||||||
      "version": "0.6.1",
 | 
					      "version": "0.6.1",
 | 
				
			||||||
@@ -3686,6 +3740,16 @@
 | 
				
			|||||||
        "safe-decode-uri-component": "^1.2.1",
 | 
					        "safe-decode-uri-component": "^1.2.1",
 | 
				
			||||||
        "tunnel": "^0.0.6",
 | 
					        "tunnel": "^0.0.6",
 | 
				
			||||||
        "yargs": "^17.1.1"
 | 
					        "yargs": "^17.1.1"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "axios": {
 | 
				
			||||||
 | 
					          "version": "0.24.0",
 | 
				
			||||||
 | 
					          "resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
 | 
				
			||||||
 | 
					          "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
 | 
				
			||||||
 | 
					          "requires": {
 | 
				
			||||||
 | 
					            "follow-redirects": "^1.14.4"
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "netmask": {
 | 
					    "netmask": {
 | 
				
			||||||
@@ -3897,6 +3961,11 @@
 | 
				
			|||||||
        "ipaddr.js": "1.9.1"
 | 
					        "ipaddr.js": "1.9.1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "proxy-from-env": {
 | 
				
			||||||
 | 
					      "version": "1.1.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "psl": {
 | 
					    "psl": {
 | 
				
			||||||
      "version": "1.9.0",
 | 
					      "version": "1.9.0",
 | 
				
			||||||
      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
 | 
					      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
  "author": "coder-xiaomo",
 | 
					  "author": "coder-xiaomo",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "axios": "^1.7.9",
 | 
				
			||||||
    "chalk": "4.1.2",
 | 
					    "chalk": "4.1.2",
 | 
				
			||||||
    "cheerio": "^1.0.0-rc.12",
 | 
					    "cheerio": "^1.0.0-rc.12",
 | 
				
			||||||
    "crypto": "^1.0.1",
 | 
					    "crypto": "^1.0.1",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user