[axios] Comment reprendre le téléchargement de fichiers Excel binaires dans axios

Utilisez Axios pour télécharger des fichiers Excel binaires et interrompre et reprendre les téléchargements. Voici une façon simple de procéder :

1. Avant de commencer le téléchargement, assurez-vous qu'Axios a été utilisé dans votre projet (peut être installé en utilisant npm ou Yarn).

2. Créez une fonction de téléchargement et utilisez axios.get() pour lancer une demande de téléchargement de fichier. Comme suit:

const axios = require('axios');
const fs = require('fs');

// 下载函数
async function downloadExcelFile(url, outputPath, headers = {
     
     }) {
    
    
  const writer = fs.createWriteStream(outputPath, {
    
     flags: 'a' });
  
  const response = await axios.get(url, {
    
    
    responseType: 'stream',
    headers,
  });

  response.data.pipe(writer);

  // 返回一个 Promise,以便在外部处理下载过程
  return new Promise((resolve, reject) => {
    
    
    writer.on('finish', resolve);
    writer.on('error', reject);
  });
}

// 调用下载函数
downloadExcelFile('http://example.com/excel-file.xls', 'output.xls')
  .then(() => {
    
    
    console.log('文件下载完成');
  })
  .catch((error) => {
    
    
    console.error('文件下载失败', error);
  });

3. Ajoutez la prise en charge de l'interruption et de la reprise des téléchargements à la fonction de téléchargement existante. Vous pouvez utiliser l'en-tête de demande de plage pour contrôler la position du bloc demandée. Modifiez la fonction de téléchargement comme suit :

const axios = require('axios');
const fs = require('fs');

// 下载函数
async function downloadExcelFile(url, outputPath, headers = {
     
     }) {
    
    
  let startByte = 0;

  if (fs.existsSync(outputPath)) {
    
    
    // 如果已经存在输出文件,则获取已下载的文件大小
    const stats = fs.statSync(outputPath);
    startByte = stats.size;

    // 通过设置 Range 请求头来指定从哪个位置继续下载
    headers['Range'] = `bytes=${
      
      startByte}-`;
  }

  const writer = fs.createWriteStream(outputPath, {
    
     flags: 'a' });

  const response = await axios.get(url, {
    
    
    responseType: 'stream',
    headers,
  });

  response.data.pipe(writer);

  // 返回一个 Promise,以便在外部处理下载过程
  return new Promise((resolve, reject) => {
    
    
    writer.on('finish', resolve);
    writer.on('error', reject);
  });
}

// 调用下载函数
downloadExcelFile('http://example.com/excel-file.xls', 'output.xls')
  .then(() => {
    
    
    console.log('文件下载完成');
  })
  .catch((error) => {
    
    
    console.error('文件下载失败', error);
  });

Avec la modification ci-dessus, la fonction de téléchargement vérifiera si le fichier de sortie existe déjà. S'il existe, utilisez Rangel'en-tête de la requête pour spécifier que le téléchargement continuera à partir de la taille du fichier téléchargé, réalisant ainsi la fonction d'interruption et de reprise du téléchargement.

Veuillez noter que le serveur doit prendre en charge et gérer correctement Rangeles en-têtes de requêtes tout en garantissant un transfert et une reprise corrects du contenu des fichiers. Assurez-vous que les informations d’en-tête de réponse sont correctement définies côté serveur. Le téléchargement de la reprise du point d'arrêt frontal est en fait basé sur la prise en charge et les protocoles côté serveur.

Je suppose que tu aimes

Origine blog.csdn.net/hzxOnlineOk/article/details/133087091
conseillé
Classement