Throw error on incorrect download sizes

This commit is contained in:
2019-08-26 17:57:18 -05:00
parent b36878b80c
commit 6521f37471

View File

@@ -182,32 +182,43 @@ module.exports.downloadFile = (url, destination, progressCallback, completeCallb
.get(url, { .get(url, {
responseType: 'stream', responseType: 'stream',
}) })
.then((response) => { .then(response => {
const stream = fs.createWriteStream(destination);
const total = parseInt(response.headers['content-length'], 10); const total = parseInt(response.headers['content-length'], 10);
let downloaded = 0; if (total === 0) {
response.data.on('data', (chunk) => { throw Error('No data available for download');
stream.write(Buffer.from(chunk)); } else {
downloaded += chunk.length; const stream = fs.createWriteStream(destination);
if (progressCallback) {
progressCallback((downloaded / total * 100.0).toFixed(2));
}
});
response.data.on('end', () => { let downloaded = 0;
stream.end(() => { response.data.on('data', (chunk) => {
completeCallback(); stream.write(Buffer.from(chunk));
downloaded += chunk.length;
if (progressCallback) {
progressCallback((downloaded / total * 100.0).toFixed(2));
}
}); });
});
response.data.on('error', (e) => { response.data.on('end', () => {
stream.end(() => { stream.end(() => {
completeCallback(e); if (downloaded === 0) {
throw Error('Received 0 bytes');
} else if (downloaded !== total) {
throw Error('Received incorrect number of bytes');
} else {
completeCallback();
}
});
}); });
});
response.data.on('error', error => {
stream.end(() => {
completeCallback(error);
});
});
}
}) })
.catch((e)=> { .catch(error => {
completeCallback(e); completeCallback(error);
}); });
}; };