Скачать файл в угловом формате из сервиса java - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь загрузить файл, отправленный с моего внутреннего сервера.Метод get хорошо работает на почтальоне, но я не могу заставить его работать из моего внешнего приложения (угловой 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.

У меня следующее сообщение:

Неожиданный% токена в JSON в позиции 0.

Но на вкладке "сеть" в инструментах Chrome Devзапрос хороший (200), и я вижу свой объект в части «ответ». Я не понимаю, почему он не работает: /.

Если кто-то увидит, что я делаю неправильно, это, вероятно, будетспаси мое здравомыслие.

1 Ответ

0 голосов
/ 25 февраля 2019

Angular пытается проанализировать ваше тело ответа http как JSON (тип ответа по умолчанию).responseType указан не в HttpHeaders, а в объекте httpOptions.Поместите необходимые responseType в httpOptions, который вы передаете get.

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

    return this.httpClient.get(url, { headers, responseType: 'blob' }).toPromise();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...