Всем привет!
Пытаюсь сконвентировать text/csv в blob, чтобы пользователь имел возможность скачать csv файл по кнопке.
Чем располагаю: Есть API (Java 8 с RESTEasy), при обращении к одному из POST методов, на выходе возвращается text/csv :
Есть веб клиент на Angular 7 и речь пойдет о проблеме в нем... При нажатии на кнопку срабатывает следующий код:
exportSourceTableToCsv() {
this.api.postExportToCsv(this.tableSource.toTable())
.toPromise()
.then(res => this.saveFile(res));
}
public postExportToCsv(table: Table): Observable<any> {
return this.httpClient.post<any>( apiConfig.EXPORT_TO_CSV, table);
}
saveFile(response) {
//Вот тут я так понимаю проблемное место
const blob = new Blob([response._body], { type: 'text/csv' });
saveAs(blob, "table.csv"); //Плагин file-saver из npm для сохранения файлов.
}
При вызове последнего метода выводится ошибка:
ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":200,"statusText":"OK","url":"http://localhost:4200/table/export","ok":false,"name":"HttpErrorResponse","message":"Http failure during parsing for http://localhost:4200/table/export","error":{"error":{},"text":"1;2;33\r\n23;23;33\r\n213;321;33\r\n123;3;33\r\n213;123;33\r\n"}}
at resolvePromise (zone.js:831)
at resolvePromise (zone.js:788)
at zone.js:892
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:17280)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at drainMicroTaskQueue (zone.js:601)
at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
at invokeTask (zone.js:1744)
Как это можно исправить? Видел много примеров именно с таким же подходом, должно работать
Пробовал указывать явно charset и еще text в качестве типа источника при создании Blob - не помогло. Тип возвращаемого значения для метода в API мне не сильно принципиален, но хотелось бы использовать предназначенный для передачи CSV - text/csv
Спасибо!
Примерно так:
return this.httpClient
.post<any>( apiConfig.EXPORT_TO_CSV, table,
{
headers: new HttpHeaders({ 'Content-Type': 'text/csv' }),
observe: 'response',
responseType: 'blob'
})
.subscribe(file => saveAs(file, "table.csv"));
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создал новое обновление, но оно не прошло тесты на google playc сообщением:
Необходимо найти в БД (Postgres) всех юзеров или операторов (role) по списку регионов (List regions)
Разрабатывается приложение командной строки, где строка следующего вида --file=dbtxt add --name=John --surname=Doe --age=27 --email=john@gmail
Создан Slave TCP Modbus при помощи библиотеки Jamod (пробовал так же j2mod с тем же результатом) согласно документацииРаботает, обмен идет, но есть пара...