Я перестраиваю сайт для клиента, и сайт требует, чтобы при нажатии на кнопку pdf-файл передавался клиенту с сервера. Я сделал свой собственный фиктивный сервер с теми же конечными точками, чтобы воспроизвести его работу, но я изо всех сил пытаюсь получить PDF. Это первый раз, когда я действительно работал с PDF-файлами в контексте веб-разработки, отсюда и невежество. Пожалуйста, поверьте, что я сделал много поиска в Google.
У меня есть некоторые проблемы:
- В некоторых источниках говорится, что для отправки PDF с Node иЭкспресс, вы просто используете res.downoad ('path / to / filename'), но мне не удалось заставить его работать таким образом.
- , потому что я использую React Router, если я пытаюсь вызвать маршрут PDFс тегом привязки я перенаправлен на этот маршрут (если я делаю e.preventDefault ()), ничего не происходит.
- Другие источники используют вызов AJAX для извлечения файла PDF, и я могу это сделать, но я не знаю, как его обработать в блоке then.
- Другой источник сказал, что мне просто нужно использовать window.open (url) на внешнем интерфейсе, но он также просто следует маршруту маршрутизатора React и ничего не делает.
Текст URL-адреса для маршрута PDF: "/historical_report/daily_risk_report_2019_02_18.pdf/fundname" И я вижу, что этот URL-адрес получает pdf с сервера клиента.
Мои вопросы:
- Как правильно получить такой PDF-файл в React? Должен ли я просто использовать тег привязки? Или мне нужно активно использовать Fetch / Axios?
- Достаточно ли 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 ...) Было бы замечательно, если бы кто-то мог дать совет. Заранее спасибо.