Проблемы с загрузкой PDF (React, Node, Express) - PullRequest
0 голосов
/ 14 октября 2019

Я перестраиваю сайт для клиента, и сайт требует, чтобы при нажатии на кнопку pdf-файл передавался клиенту с сервера. Я сделал свой собственный фиктивный сервер с теми же конечными точками, чтобы воспроизвести его работу, но я изо всех сил пытаюсь получить PDF. Это первый раз, когда я действительно работал с PDF-файлами в контексте веб-разработки, отсюда и невежество. Пожалуйста, поверьте, что я сделал много поиска в Google.

У меня есть некоторые проблемы:

  1. В некоторых источниках говорится, что для отправки PDF с Node иЭкспресс, вы просто используете res.downoad ('path / to / filename'), но мне не удалось заставить его работать таким образом.
  2. , потому что я использую React Router, если я пытаюсь вызвать маршрут PDFс тегом привязки я перенаправлен на этот маршрут (если я делаю e.preventDefault ()), ничего не происходит.
  3. Другие источники используют вызов AJAX для извлечения файла PDF, и я могу это сделать, но я не знаю, как его обработать в блоке then.
  4. Другой источник сказал, что мне просто нужно использовать window.open (url) на внешнем интерфейсе, но он также просто следует маршруту маршрутизатора React и ничего не делает.

Текст URL-адреса для маршрута PDF: "/historical_report/daily_risk_report_2019_02_18.pdf/fundname" И я вижу, что этот URL-адрес получает pdf с сервера клиента.

Мои вопросы:

  1. Как правильно получить такой PDF-файл в React? Должен ли я просто использовать тег привязки? Или мне нужно активно использовать Fetch / Axios?
  2. Достаточно ли res.download для обслуживания pdf с сервера?

Я пытался использовать это на внешнем интерфейсе:

fetch(
      url,
      {
        method: "GET",
        headers: {
          Accept: "application/pdf",
          "Content-Type": "application/pdf"
        }
      }
    )
      .then(response => {
          console.log(response)
          return response
      })
      .then(response => response.blob())
      .then(response => {
        var blob = response;
        var reader = new window.FileReader();
        reader.readAsDataURL(blob);
        reader.onloadend = function() {
          var base64data = reader.result;

          window.open(base64data);
        };
      })
      .catch(error => {
        console.error(error);
      });

и это на серверном:

router.get('my url', (req, res) => {
    res.download('url')
})

, но не повезло (этовозвращает ошибку 404 ...) Было бы замечательно, если бы кто-то мог дать совет. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...