Получение отчёта через Rest Api

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Закрыто
AnnaKopteva
Сообщения: 5
Зарегистрирован: 14 фев 2017, 12:43

Получение отчёта через Rest Api

Сообщение AnnaKopteva » 26 ноя 2018, 23:51

Добрый день.

Пишу http запрос для получения файла отчёта. В ответе приходят данные с некорректной кодировкой, не распознаётся кириллица. Подскажите, как это можно исправить?

В приложении файл с ответом.

Листинг запроса:

this.$http.get("/Reports/ParametersSheet",
{
headers: {
'Accept': 'application/json',
},
params: {
reportId: reportId,
startDate: startDate,
endDate: endDate,
dataType: dataType,
entityId: entityId,
reportEntity: reportEntity,
format: format
},
}
).then(response =>
{
console.log(response);
}
)
Вложения
error_coding.JPG
error_coding.JPG (45.52 КБ) 935 просмотров
Михаил Ключко
Разработчик
Разработчик
Сообщения: 570
Зарегистрирован: 24 авг 2011, 09:16

Re: Получение отчёта через Rest Api

Сообщение Михаил Ключко » 27 ноя 2018, 04:10

Вам нужно декодировать имя файла с помощью метода decodeURIComponent().
Мы у себя используем следующий код на TypeScript для декодирования имени файла:

Код: Выделить всё

decodeURIComponent(response.headers.get('x-filename'));
Заметьте что ответ от сервера приходит в виде потока байт, а если точнее arrayBuffer. Для сохранения файла можно использовать объекты File или Blob и сторонние библиотеки, например file-saver.
Мы в typescript используем следующий код:

Код: Выделить всё

var blob = new Blob([response.body, { type: 'application/pdf; charset=utf-8' }]);
saveAs(blob, fileName);
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
AnnaKopteva
Сообщения: 5
Зарегистрирован: 14 фев 2017, 12:43

Re: Получение отчёта через Rest Api

Сообщение AnnaKopteva » 08 дек 2018, 18:02

Использовала ваш пример в своём коде:

Код: Выделить всё

              
var fileName = decodeURIComponent(response.headers["x-filename"]);

var FileSaver = require('file-saver');
var blob = new Blob([response.data, {type: "application/pdf; charset=utf-8"}]);
FileSaver.saveAs(blob, fileName);
Но, к сожалению, сохраняется пустой PDF, хотя в консоли получается вывести данные ответа без декодирования.
Подскажите, нужно ли указывать дополнительные заголовки в запросе или в чём может быть ошибка?
AnnaKopteva
Сообщения: 5
Зарегистрирован: 14 фев 2017, 12:43

Re: Получение отчёта через Rest Api

Сообщение AnnaKopteva » 10 дек 2018, 22:51

Разобралась, надо указывать в запросе responseType:

Код: Выделить всё

responseType: 'arraybuffer',
Может кому-нибудь пригодится, в документации этого пока нет.
Закрыто