Как можно скачать PDF-файл с помощью библиотеки Axios?

  • 28 августа 2023 г. 10:46
Ответы на вопрос 3
Ошибка, которую вы видите, связана с кодировкой данных, которые вы пытаетесь декодировать с помощью функции `atob` в браузере. Функция `atob` может обрабатывать только символы в кодировке Latin-1 (ISO-8859-1), и символы, не входящие в эту кодировку, вызывают ошибку.

В случае скачивания PDF-файла с помощью Axios, вам необходимо обрабатывать данные как двоичные, а не как текстовые данные. Для этого опция `responseType` должна быть установлена как `'blob'` (двоичный объект).

Вот пример, как можно скачать PDF-файл с помощью Axios с сохранением его на локальном компьютере:

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

axios({
  url: 'http://example.com/path/to/file.pdf',
  method: 'GET',
  responseType: 'blob' // важно указать, что ожидаем двоичные данные
})
  .then(response => {
    const pdfFile = new Blob([response.data], { type: 'application/pdf' });
    const downloadLink = document.createElement('a');
    downloadLink.href = window.URL.createObjectURL(pdfFile);
    downloadLink.download = 'file.pdf';
    downloadLink.click();
  })
  .catch(error => {
    console.error(error);
  });
```

В этом примере мы создаем запрос с помощью Axios с указанием опции `responseType: 'blob'`, чтобы получить ответ в виде двоичных данных (blob). Затем мы создаем объект `Blob` с данными ответа и определенным типом ('application/pdf'), создаем ссылку на этот объект, указываем имя файла для скачивания и "кликаем" по ссылке.

Обратите внимание, что этот код будет работать в браузере, так как это клиентская библиотека. Если вы работаете в среде Node.js, то можете воспользоваться модулем `axios` вместе с модулем `fs` для сохранения файла на диск. В этом случае необходимо изменить вызов `downloadLink.click()` на сохранение файла с помощью `fs.writeFile()`.
В функции atob не поддерживаются символы, которые могут присутствовать в строке. Чтобы избежать проблем, можно предварительно проверить строку на наличие этих символов. Также, можно использовать функцию encodeURIComponent, чтобы закодировать символы в URL-совместимую форму. Вот пример кода:

const d = (name, blob) => {
    const url = URL.createObjectURL(blob);
    // код
} 
 в функции atob не допускаются определенные символы. Для избежания проблем рекомендуется предварительно проверить строку и удалить эти символы. Вы также можете использовать функцию encodeURIComponent для кодирования символов в URL-совместимую форму. Пример кода:

const d = (name, blob) => {
    const url = URL.createObjectURL(blob);
    // код
}
Похожие вопросы