У меня есть запрос, который возвращает файл PDF. Хорошо отображается в браузере, скачанном curl.
Мое приложение-интерфейс для реагирования вызывает этот запрос (ajax) и возвращает его пользователю.
Вот как я это называю:
httpRequest({
method: 'GET',
responseType: 'blob',
url: `/test/pdf?` +
`param1=${var1}&` +
`param2=${var2}`
});
Это httpRequest:
export const httpRequest = (options) => {
return new Promise((resolve, reject) => {
const contentType = options.contentType ? options.contentType : 'application/x-www-form-urlencoded';
request.open(options.method, options.url, async);
request.setRequestHeader('Content-Type', contentType);
request.onreadystatechange = () => {
if (request.readyState === readyState && request.status === status) {
switch (responseType) {
case 'json': {
if (request.responseText) {
resolve(JSON.parse(request.responseText));
} else {
throw new Error('Can not parse JSON!');
}
break;
}
case 'string': {
resolve(request.responseText);
break;
}
case 'blob': {
resolve(request.response)
}
default: {
resolve(request);
break;
}
}
}
};
request.send(data);
});
};
Получив ответ, я возвращаю его пользователю:
const link = document.createElement('a');
const file = new Blob([response.response], { type: 'application/pdf' });
link.href = window.URL.createObjectURL(file);
link.download = `test.pdf`;
document.body.appendChild(link);
link.click();
Он возвращает мне пустой PDF (две пустые страницы). Его размер в байтах примерно в 2 раза больше, чем у обычного pdf с содержимым (я получил его от curl).
Вот типичная разница между двумя pdf-файлами (хорошее — слева, плохое — справа) http://storage5.static.itmages.com/i/18/0125/h_1516888730_3382943_f47d4f9cbe.png
Что не так в моем коде? Любые обходные пути?