使用request下载文件时,如何判断下载成功?
function downAsync(urlstr) {
// 根据url获取文件名
const filename = url.parse(urlstr).pathname.split('/').reverse()[0];
return new Promise((resolve, reject) => {
// 判断文件是否存在
const filepath = rootPath.concat('/public/ad/', filename);
if(global.fs.existsSync(filepath)) {
logger.info(filename.concat('文件存在不下载'));
resolve(filename);
return;
}
const stream = request(urlstr).on('error', (error) => {
logger.info('获取文件失败', urlstr);
global.fs.unlinkSync(filepath);
reject(error);
}).pipe(
global.fs.createWriteStream(rootPath.concat('/public/ad/', filename))
);
stream.on('finish', () => {
logger.info(filename.concat('文件不存在下载成功'));
resolve(filename);
});
stream.on('error', (error) => {
global.fs.unlinkSync(filepath);
logger.info('写入文件失败', filepath);
reject(error);
});
});
}
上面这个函数,下载过程中断网,没有错误报出。大神指教下
2 回复
通过查看官网文档发现,要设置超时时间 ··· const stream = request(urlstr, { timeout: 10000 }).on(‘error’, (error) => { logger.info(‘获取文件失败’, urlstr); global.fs.unlinkSync(filepath); reject(error); }).pipe( global.fs.createWriteStream(rootPath.concat(’/public/ad/’, filename)) ); ···
参考 Downloader