1
0
Code Issues Pull Requests Projects Releases Wiki Activity GitHub Gitee

批量下载文件脚本

This commit is contained in:
2025-02-06 02:10:43 +08:00
parent 8778ad53ab
commit 92798436b0
4 changed files with 138 additions and 14 deletions

1
batch-download/README.md Normal file
View File

@@ -0,0 +1 @@
# 文件批量下载工具

53
batch-download/index.js Normal file
View 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
View File

@@ -9,6 +9,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"axios": "^1.7.9",
"chalk": "4.1.2",
"cheerio": "^1.0.0-rc.12",
"crypto": "^1.0.1",
@@ -183,11 +184,28 @@
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"node_modules/axios": {
"version": "0.24.0",
"resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
"version": "1.7.9",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz",
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"license": "MIT",
"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": {
@@ -855,9 +873,16 @@
}
},
"node_modules/follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
"version": "1.15.9",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -1497,6 +1522,15 @@
"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": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/netmask/-/netmask-2.0.2.tgz",
@@ -1766,6 +1800,12 @@
"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": {
"version": "1.9.0",
"resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",
@@ -2650,11 +2690,25 @@
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"axios": {
"version": "0.24.0",
"resolved": "https://registry.npmmirror.com/axios/-/axios-0.24.0.tgz",
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
"version": "1.7.9",
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz",
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"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": {
@@ -3186,9 +3240,9 @@
}
},
"follow-redirects": {
"version": "1.15.2",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
"version": "1.15.9",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
},
"forever-agent": {
"version": "0.6.1",
@@ -3686,6 +3740,16 @@
"safe-decode-uri-component": "^1.2.1",
"tunnel": "^0.0.6",
"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": {
@@ -3897,6 +3961,11 @@
"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": {
"version": "1.9.0",
"resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz",

View File

@@ -9,6 +9,7 @@
"author": "coder-xiaomo",
"license": "MIT",
"dependencies": {
"axios": "^1.7.9",
"chalk": "4.1.2",
"cheerio": "^1.0.0-rc.12",
"crypto": "^1.0.1",