Angular 无法在post请求5中设置responseType,正在尝试从post api捕获文件响应
我试图将responseType设置为arraybuffer,但它给出了错误。api正在返回一个文件,我需要捕获该文件并生成该文件 我调用exportCartDetails,如下所示,它是在OnAddEvent emitter on Mat对话框上触发的Angular 无法在post请求5中设置responseType,正在尝试从post api捕获文件响应,angular,http,post,http-post,angular5,Angular,Http,Post,Http Post,Angular5,我试图将responseType设置为arraybuffer,但它给出了错误。api正在返回一个文件,我需要捕获该文件并生成该文件 我调用exportCartDetails,如下所示,它是在OnAddEvent emitter on Mat对话框上触发的 const data1 = this.dialogRef.componentInstance.onAdd.subscribe(result => { this.exportCartDetails(result)
const data1 = this.dialogRef.componentInstance.onAdd.subscribe(result => {
this.exportCartDetails(result)
.subscribe(
mydata=>{
console.log('data is all here');
var file =new Blob([mydata],{type: 'application/vnd.ms-excel' });
var fileURL=URL.createObjectURL(file);
let a =document.createElement("a");
a.style.display = "none";
a.href=fileURL;
a.target="_blank";
a.download="CartData.xls";
a.click();
a.remove();
}
)
,
err=>{
alert("Error in calling api");
console.log(err);
};
出口购物车详情如下
exportCartDetails(report_data: ReferenceDataApi): Observable<ArrayBuffer> {
const headers=new HttpHeaders().set('Content-Type', '*' );
//header.set( 'Content-Disposition': 'attachment; filename=' + req.body.filename,);
const response = new HttpResponse();
console.log(this.report_data);
return this.http.post<ArrayBuffer>(url,this.report_data,{headers,responseType:'arraybuffer'})
.pipe(
catchError(this.handleError<ArrayBuffer>('exportCartDetails'))
);
}
作为一种解决方法,您可以从
httpClient.post()
中删除预期的返回类型
如果从
this.http.post(url,this.report\u data,{headers,responseType:'ArrayBuffer'})中删除返回类型ArrayBuffer
,或者通过添加observe:body
参数显式地像this.http.post(url,this.report\u data,{headers,observed:'body',responseType:'ArrayBuffer'})来删除返回类型,是否有效
@AmitChigadani是的,错误已经消失,但现在无法下载文件。非常感谢您的评论。非常感谢你。在你第一次发表评论之后,我做了一些修改,效果很好。我被困了两天。非常感谢。
ERROR in src/app/cart-detail/cart-detail.component.ts(118,91): error TS2345: Argument of type '{ headers: HttpHeaders; responseType: ArrayBuffer; }' is not assignable to parameter of type '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...'.
Types of property 'responseType' are incompatible.
Type 'ArrayBuffer' is not assignable to type '"json"'.
src/app/cart-detail/cart-detail.component.ts(118,113): error TS2352: Type 'string' cannot be converted to type 'ArrayBuffer'.
return this.http.post(url,this.report_data,{headers,responseType:'arraybuffer'})
.pipe(
catchError(this.handleError<ArrayBuffer>('exportCartDetails'))
);
return this.http.post<ArrayBuffer>(url,this.report_data,{headers,responseType:'arraybuffer' as 'arraybuffer'})
.pipe(
catchError(this.handleError<ArrayBuffer>('exportCartDetails'))
);