Загрузка javascript ajax pdf возвращает пустой документ

У меня есть запрос, который возвращает файл 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

Что не так в моем коде? Любые обходные пути?


person kosbr    schedule 25.01.2018    source источник
comment
как выглядит ответ? вы, скорее всего, не можете просто бросить это в Blob и назвать это днем ​​​​   -  person Robbie Milejczak    schedule 25.01.2018
comment
чтобы уточнить, убедитесь, что ваш первоначальный ответ удобен для больших двоичных объектов. Если вы получаете ответ, проблема, вероятно, не в сетевом вызове developer.mozilla.org/en-US/docs/Web/API/Blob/Blob   -  person Robbie Milejczak    schedule 25.01.2018


Ответы (1)


Похоже, что с возвратом части ответа все в порядке, поэтому попробуйте проверить httpRequest() - правильно ли применены параметры, например responseType. Пожалуйста, поделитесь кодом, он может быть более информативным.

person Anzhela    schedule 26.01.2018
comment
request.responseType = 'большой двоичный объект'; был необходим - person kosbr; 29.01.2018