gpt4 book ai didi

java - 从java后端服务以 Angular 下载文件

转载 作者:行者123 更新时间:2023-11-30 05:45:42 28 4
gpt4 key购买 nike

我正在尝试下载从后端服务器发送的文件。get 方法在 postman 上运行良好,但我无法使其在我的前端应用程序中运行( Angular 5)。

这是我的后端:

@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/recupererDocument/{id}")
@ResponseStatus(value = {Response.Status.OK, Response.Status.BAD_REQUEST,
Response.Status.INTERNAL_SERVER_ERROR,})
@ElementClass(request = Long.class, response = Response.class)
public Response recupererDocument(
@NotNull(message = "L'id (identifiant du document) est obligatoire") @PathParam("id") final String id);



public Response recupererDocument(String id) {
File file = null;
final WebTarget target = ...;

Builder builderDoc = target.request(typeMime);

final Response reponseDocument = builderDoc.accept(typeMime).get();
LOGGER.debug(reponseDocument.getStatus());

if (reponseDocument.getStatus() == 200) {
file = reponseDocument.readEntity(new GenericType<File>() {
});
}
reponseDocument.close();
return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM).build();
}

还有我的前端:

telechargerPieceJointe(id: string): void {
this.s
.telechargerPieceJointe(id)
.then(pj => {
this.downloadFile(pj);
})
.catch(e => {
if (isDevMode()) {
console.log('Erreur : ' + e);
}
});
}

downloadFile(data: Response) {
const blob = new Blob([data], {type: 'application/octet-stream'});
const url = window.URL.createObjectURL(blob);
window.open(url);
}


telechargerPieceJointe(id: string): Promise<any> {
const url = environment.rest.local.recupererDocument + '/' + id;
const headers = new HttpHeaders({
Accept: 'application/pdf',
responseType: 'blob'
});

return this.httpClient.get(url, {headers}).toPromise();
}

现在在我的调试前端中,我不输入“.then”方法,而是输入 .catch。

我收到以下消息:

Unexpected token % in JSON at position 0.

但是在 chrome 开发工具的“网络”选项卡中,请求良好(200),并且我可以在“响应”部分看到我的对象。我不明白为什么它不起作用:/.

如果有人看到我做错了什么,可能会挽救我的理智。

最佳答案

Angular 尝试将您的 http 响应正文解析为 JSON(这是默认响应类型)。responseType 不是在 HttpHeaders 中指定的,而是在 httpOptions 对象中指定的。

在传递给 httpClient.get 的 httpOptions 中指定 responseType: 'blob'

telechargerPieceJointe(id: string): Observable<any> {
const url = environment.rest.local.recupererDocument + '/' + id;
const headers = new HttpHeaders({
Accept: 'application/pdf'
});

return this.httpClient.get(url, { headers, responseType: 'blob' });
}

关于java - 从java后端服务以 Angular 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54870674/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com