wgdown
Version:
Node 真·多线程下载。A tool of multi-process downloading for node
79 lines (78 loc) • 2.18 kB
JavaScript
;
/**
* wgdown ts
*
* wgdown is a download tool using child process
*
* @author wind2esg
* @date 20191008
*
* #child
*
* result
* '0' init
* '1' local exists
* '2' not exist in server
* '3' download but problem
* '0' downloaded
* '5' error
*/
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs");
const process = require("process");
const request = require("request");
new Promise((resolve, reject) => {
let msg = {};
msg.serverPath = process.argv[2];
msg.localPath = process.argv[3];
msg.size = 0;
msg.result = '0';
if (fs.existsSync(msg.localPath)) {
msg.result = '1';
process.send(JSON.stringify(msg));
resolve();
return;
}
let rs = request(msg.serverPath);
rs.on('error', (err) => {
console.log("error: " + msg.serverPath + " " + err);
msg.result = '5';
process.send(JSON.stringify(msg));
resolve();
return;
})
.on('response', (response) => {
if (response.statusCode == 200) {
msg.size = parseInt(response.headers["content-length"]);
let ws = fs.createWriteStream(msg.localPath);
rs.pipe(ws.on('error', (err) => {
console.log(msg.localPath);
console.log(err);
ws.end();
msg.result = '5';
process.send(JSON.stringify(msg));
resolve();
return;
})
.on('finish', () => {
if (msg.size > ws.bytesWritten) {
ws.end();
msg.result = '3';
process.send(JSON.stringify(msg));
resolve();
return;
}
ws.end();
process.send(JSON.stringify(msg));
resolve();
return;
}));
}
else {
msg.result = '2';
process.send(JSON.stringify(msg));
resolve();
return;
}
});
});