Как скачать PDF с Laravel с Angular? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть Angular 7 Frontend, и я пытаюсь загрузить файл PDF из API Laravel 5.8. К сожалению, это не работает. Обычно это можно сделать так?

Код следующий:

    download(document) {
        this.apiService.downloadDocument(document).subscribe((document) => {
            this.notification.success('Download started.');
        }, error1 => console.log(error1));
    }

Теперь я попробовал его с двумя вариантами:

Вариант 1: без заголовков

    downloadDocument(document): Observable<any> {
        return this.httpClient.post<any>(`${this.PHP_API_SERVER}/downloadDocument`, document)
    }

Параметр2: с заголовками

    downloadDocument(document): Observable<any> {
        let headers = new HttpHeaders();
        headers = headers.set('Accept', 'application/pdf');
        return this.httpClient.post<any>(`${this.PHP_API_SERVER}/downloadDocument`, document, {headers: headers})
    }

Теперь часть Backend:

    public function downloadDocument(Request $request)
    {

        try {
            return Storage::download($request->name_hash); // name_hash is the path to the file
        } catch (QueryException $e) {
            return response()->json($e, Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }

Забавно то, что это работает, потому что я вижу PDF на вкладке сети в инструментах разработчика впредварительный просмотр есть (я думаю, декодированный?) PDF. Выглядит это так:

%PDF-1.4
%äüöÃ
2 0 obj
<</Length 3 0 R/Filter/FlateDecode>>
stream
xU˪ãFÝû+z°§«ú
[...]

Но загрузка не начинается! Файл console.log в «error1» в моем коде выше просто говорит:

OK

Я не знаю, слишком ли это много, но здесь также есть заголовки запроса и ответа.

Заголовки ответа:

access-control-allow-headers: Content-Type, Accept, Authorization, X-Requested-With, Application
access-control-allow-methods: POST, GET, OPTIONS, PUT, DELETE
access-control-allow-origin: *
cache-control: private, must-revalidate
content-disposition: attachment; filename=rD1579koch77OUIfnPZmnJaIgDUnUMSINaYGdKO8.pdf
content-length: 212677
content-type: application/pdf
date: Sun, 10 Nov 2019 19:37:14 GMT
expires: -1
pragma: no-cache
server: nginx
status: 200
vary: Authorization
x-ratelimit-limit: 60
x-ratelimit-remaining: 59

Заголовки запроса:

:authority: api.myapi.de
:method: POST
:path: /api/downloadDocument
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,nl;q=0.6
authorization: Bearer [my-token-is-here]
content-length: 224
content-type: application/json
origin: http://localhost:4200
referer: http://localhost:4200/
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...