需求:把json中的图片地址下载到本地
1、先来个简短版
```
/**
* @param {string} filepath 文件路径
* @param {string} imgUrl 图片url地址
* @param {string} imgName 图片名称
* @param {string} dirName 文件夹名字
* @param {number} index 下标,可用于做进度条或者判断是否下载完成
*/
// 保存图片
function downImage (filepath,imgUrl, imgName, dirName, index) {
return new Promise((resolve, rej) => {
https.get(imgUrl, (res) => {
let imgData = "";
res.setEncoding("binary");
res.on("data", (chunk) => {
imgData += chunk;
});
res.on("end", () => {
fs.writeFile(`${filepath}\\${dirName}\\${imgName}.jpg`, imgData, "binary", (err) => {
if (err) {
rej({ code: 0, msg: "saveimg fail" });
}
resolve({
code: 1,
msg: "saveimg success",
count: index + 1
});
});
});
});
});
```
2、以上下载少量图片还是行的通,遇到网络延迟或者图片下载失败,做了容错处理
```
async downImage(imgUrl, imgName, dirName, index, filePath) {
return new Promise(async (resolve, rej) => {
await https.get(imgUrl, (res) => {
let imgData = "";
res.setEncoding("binary");
res.on("data", (chunk) => {
imgData += chunk;
});
res.on("end", () => {
fs.writeFile(`${filePath}\\${dirName}\\${imgName}.jpg`, imgData, "binary", async (err) => {
if (err) {
const errData = JSON.stringify(err);
rej({
code: 0, msg: "saveimg fail end", dataInfo: {
imgUrl, imgName, dirName, index, filePath
}
});
}
resolve({
code: 1,
msg: "saveimg success",
count: index + 1
});
});
});
res.on('error', () => {
rej({
code: 0, msg: "saveimg fail err", dataInfo: {
imgUrl, imgName, dirName, index, filePath
}
});
});
}).on('error', async (err) => {
const errData = JSON.stringify(err);
if ((errData as any).code === "ETIMEDOUT") {
try {
const result = await this.downImage(imgUrl, imgName, dirName, index, filePath);
resolve({
code: 1,
msg: "saveimg success1",
count: index + 1
});
} catch (error) {
console.log(error, 'error');
rej({
code: 0, msg: "saveimg fail error", dataInfo: {
imgUrl, imgName, dirName, index, filePath
}
});
return;
}
}
rej({
code: 0, msg: "saveimg fail lasterror", dataInfo: {
imgUrl, imgName, dirName, index, filePath
}
});
});
});
}
```
网友评论