将HTTP响应类型设置为arraybuffer。

3
我在构建jhipster项目时遇到了一个错误,提示我需要更改一个get请求中的参数responseType。以下是错误信息:

类型为 '{ responseType: "arraybuffer"; }' 的参数无法分配给类型为 '{ headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: Ht...' 的参数。 属性'responseType'的类型不兼容。 类型'"arraybuffer"'无法分配给类型'"json"'。 版本:typescript 2.7.2

正如你所看到的,typescript告诉我要将值从arraybuffer更改为json,但是由于我正在处理文件,我必须将responseType设置为arraybufferblobjsontext
以下是代码:
showfile(file?: any): Observable<any> {
    return this.http.get<any>(SERVER_API_URL + `leave/api/downloadFile/${file}`, { responseType: 'arraybuffer' });
}
3个回答

2
this.http.get<any>

移除任何


0
当我需要调用返回文件的端点时,通常我会使用类型Observable<HttpResponse<Blob>>
尝试:
showfile(file?: any): Observable<HttpResponse<Blob>> {
    return this.http.get(SERVER_API_URL + `leave/api/downloadFile/${file}`, { responseType: 'blob' });
}

返回的类型“blob”无法赋值给类型“json”。 - undefined

0
我们使用 ArrayBuffer 作为 PDF 文件;对于 GET 动词,这种模式适用。
return this.http.get(url, {responseType: 'arraybuffer'});

一些注意事项:

  1. 如果 URL 是一个不返回文件流的 API 端点(例如 MediaType.APPLICATION_OCTET_STREAM),而是以 JSON 输出方式响应,您不能使用不匹配的 responseType。
  2. TypeScript 不需要显式的返回类型:“如果未定义参数类型,TypeScript 将默认使用 any,除非有其他类型信息可用……”参见https://www.w3schools.com/typescript/typescript_functions.php
  3. 如果您的编辑器和/或 npm 构建出现错误,可能需要创建一个包含 responseType 的对象,像这样:
    let HTTPOptions:Object = {responseType: 'arraybuffer'};
    return this.http.get(url, HTTPOptions );

您只需要在POST请求中使用明确的响应类型,例如:
    return this.http.post<ArrayBuffer>(url, requestBody, HTTPOptions );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接