Я работаю со службой веб-API ( DocRaptor ), которая возвращает PDF в качестве ответа.Первоначально работая с API, я смог создать PDF-файл и просмотреть его на своем сайте.Я получил 200 кодов статуса, говорящих мне, что ответ был успешным.Тем не менее, результат сообщения все еще возвращался как ошибка на угловой стороне с использованием этого кода:
return this.http
.post("https://docraptor.com/docs", {
headers: {
"Content-Type": "application/json"
},
user_credentials: "WEB_API_KEY",
doc: {
test: true,
name: "testDocument.pdf",
document_content: documentContent,
type: "pdf"
}
})
.subscribe(
res => {
console.log(res);
},
err => {
console.log("Error occured: " + err);
}
);
Я предполагаю, что это потому, что код ожидал JSON в результате, и вместо этого API возвратилPDF.
Документация Angular по Запрос данных не в формате JSON не дает достаточно подробных сведений о том, как использовать ответ с помощью HttpClient (как и DocRaptor по этому вопросу).При отладке я не могу сказать (используя вкладку «Сеть» в Chrome), что вызов API даже отправляется или возвращается ответ с использованием приведенного ниже кода.Вероятно, это проблема в синтаксисе ниже, но следующий код - это подход, который я пробовал, используя доступную мне документацию:
return this.http
.post("https://docraptor.com/docs", {
responseType: "blob",
headers: {
"Content-Type": "application/json",
Accept: "application/pdf"
},
user_credentials: "WEB_API_KEY",
doc: {
test: true,
name: "testDocument.pdf",
document_content: documentContent,
type: "pdf"
}
})
.pipe(tap(data => this.downloadFile(data, "application/pdf")));
ОБНОВЛЕНИЕ:
Я заново пересмотрел свой код, как предложено в ответах здесь.Тем не менее, я все еще получаю исходную ошибку, которая заключается в том, что я возвращаю 200 Status из DocRaptor API, но HttpClient от Angular не анализирует ответ как PDF.Я добавил в заголовки, чтобы принять PDF, и все еще получаю сообщение об ошибке «Неожиданный токен% в JSON в позиции 0».
repl.component.ts
generatePdf() {
var htmlCard = this.cards.filter((card: Card) => card.language === "html")[0];
var cssCard = this.cards.filter((card: Card) => card.language === "css")[0];
var documentContent = this.generateCode(
htmlCard.editorContent,
cssCard.editorContent
);
this.docRaptorService.generatePdf(documentContent).subscribe(results => {
let blob = results;
let filename = "testDocument.pdf";
FileSaver.saveAs(blob, filename);
});
}
doc-raptor.service.ts
generatePdf(documentContent: string) {
return this.http
.post("https://docraptor.com/docs", {
headers: {
"Content-Type": "application/json",
Accept: "application/pdf"
},
user_credentials: "WEB_API_KEY",
doc: {
test: true,
name: "testDocument.pdf",
document_content: documentContent,
type: "pdf"
},
responseType: "blob"
})
.pipe(
tap(
data => console.log(documentContent, data),
error => console.log(documentContent, error)
)
);
}