У меня есть веб-сайт, где пользователь может запросить некоторые данные в виде csv-файла.Затем данные возвращаются как и должны быть загружены / сохранены в файл.
Я отправляю запрос на публикацию и подписываюсь, но, похоже, каждый раз происходит сбой в методе catch.
Заголовок запроса, удаленная авторизация и тому подобное:
POST /api/@£$ HTTP/1.1
Connection: keep-alive
Content-Length: 144
Accept: application/json, text/plain, */*
Origin: https://@£$
Authorization: @£$
Content-Type: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;
с телом, содержащим параметры, поэтому ответ правильный.
Ответ:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/csv
Content-Encoding: gzip
Vary: Origin,Accept-Encoding
Server: Kestrel
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin:
Request-Context:
Content-Disposition: attachment; filename=export_20181120_103716.csv
X-Powered-By: ASP.NET
Set-Cookie:
Date: Tue, 20 Nov 2018 10:37:16 GMT
Я что-то упускаю из виду?Нужно ли устанавливать тип ответа?Этот API-интерфейс будет возвращать только данные CSV-файла, поэтому не нужно проверять тип файла.
EDIT: добавление кода, отправляющего запрос.
dataExport(parameters) {
const send = {
'id': parameters.ids,
'from': parameters.from,
'to': parameters.to
};
this.adalService.post(url, send,
{ headers: new HttpHeaders({ 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json'}) })
.do(() => { this.success('success'); })
.catch((error) => {
this.error(error);
return Observable.of(null);
})
.subscribe(r => {
const blob = new Blob([r], {type: 'text/csv'});
const url = window.URL.createObjectURL(blob);
window.open(url);
});
}
EDIT: добавлено responseType: 'text'
к пост-запросу.Это не вызывает улов из-за неправильного формата ответа.Это правильный тип?машинопись не позволила мне использовать text / csv или application / csv.И я беспокоюсь, что когда файл станет действительно большим, у блоба не будет достаточно места для сохранения данных.