使用request下载文件时,如何判断下载成功?
发布于 7 年前 作者 zouzhenxing 6833 次浏览 来自 分享
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)) ); ···

回到顶部