20 lines
895 B
JavaScript
20 lines
895 B
JavaScript
|
|
const https = require('https');
|
|
const fs = require('fs');
|
|
function downloadFile(url, dest) {
|
|
return new Promise((resolve, reject) => {
|
|
const options = { headers: { 'User-Agent': 'Mozilla/5.0' } };
|
|
const request = https.get(url, options, (response) => {
|
|
if (response.statusCode === 301 || response.statusCode === 302) {
|
|
return downloadFile(response.headers.location, dest).then(resolve).catch(reject);
|
|
}
|
|
if (response.statusCode !== 200) { return reject(new Error(`Failed: ${response.statusCode}`)); }
|
|
const file = fs.createWriteStream(dest);
|
|
response.pipe(file);
|
|
file.on('finish', () => { file.close(() => resolve()); });
|
|
});
|
|
request.on('error', (err) => { if (fs.existsSync(dest)) fs.unlink(dest, () => {}); reject(err); });
|
|
});
|
|
}
|
|
module.exports = { downloadFile };
|