Редактировать : не дубликат Передача удаленного файла в ExpressJS. В указанном вопросе удаленный файл доступен через URL и метод GET
. Это не тот случай, я получаю файл в ответном сообщении после POST
запроса.
У меня есть веб-интерфейс, позволяющий пользователю загрузить документ. По несвязанным причинам этот документ генерируется внешней службой каждый раз, когда пользователь запрашивает его (на основе некоторых контекстных данных). Таким образом, конвейер выглядит следующим образом:
- Ссылка на пользовательский клик в переднем конце
- Отправка внешнего интерфейса
GET
Запрос к концу - back-end get соответствующих внутренних данных и отправьте запрос
POST
на внешний API - Внешний API отправляет ответ, содержащий саму do c с соответствующими заголовками
content-disposition=attachment
и content-type
и документ в теле ответ. - Мой бэкэнд перенаправляет его во внешний интерфейс
- Пользователю предлагается ссылка для скачивания
Шаги с 1 по 4 работают. В чем моя проблема :
- Пользователю предлагается всплывающее окно загрузки, файл имеет правильный тип (pdf в моем примере), но файл pdf пустая страница
- Если я отправлю тот же запрос, что и мой бэкэнд, на внешний API, но через почтальона, я получу нужный файл с нужным содержимым.
- Если я отправлю тот же запрос, что и мой интерфейс к бэкэнду, но через почтальона я также получаю пустой файл pdf.
Я предполагаю, что я не правильно перенаправляю ответ от внешнего API на интерфейс.
Мой код:
function getDocFromExternalApi(req, res) {
sendMyRequest().then(externalApiResponse => {
res.status(200).header({ //headers appears to be what is expected
'content-disposition': externalApiResponse.headers['content-disposition'], //= 'attachement; filename="someFileName.pdf"'
'content-type': externalApiResponse.headers['content-type'] // = 'application/pdf'
}).send(externalApiResponse.data) //externalApiResponse.data contains the file
})
}
Я также попытался добавить кодировку к content-type
и соответствующий заголовок content-length
, но также без кубиков.
Полный ответ из внешнего API: https://pastebin.com/5FX72eAX