Перехватчик Angular 6: Изменить тип содержимого ответа

Я использую REST API, который отправляет мне данные JSON с информацией о файле (содержимое base64, MIME...). Я хочу открыть PDF в Chrome. URL.createObjectURL - плохое решение, потому что после перенаправления мы не можем загрузить файл.

Итак, в качестве бэкэнда я хочу изменить ответ заголовка на "application/pdf" и отображать содержимое файла напрямую.

Я искал в модуле перехватчиков HttpClient:

   @Injectable()
   export class DownloadInterceptor implements HttpInterceptor {
          intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

           return next.handle(request).map(event => {
               if (event instanceof HttpResponse) {
                   if (event.body) {
                       let fileContent, typeMime;
                       fileContent = event.body.cContenuFichier;

                       let headers = new HttpHeaders({
                           'Content-Type': 'application/pdf'
                       });
                       event = event.clone({ body: fileContent, headers: headers })
                   }
               }         
               return event;
           });
       }

Теперь, как это отобразить? Если я использую компонент, содержимое файла отображается на классической HTML-странице.

Так возможно ли это? С угловым? С узлом?

Большое спасибо,

2 ответа

Заголовки ответа устанавливаются и отправляются сервером. Используя экспресс, у вас есть возможность установить заголовки ответа следующим образом:

res.set('Content-Type', 'application/pdf');
res.status(//statusCode).send(//Actual response to send);

В Node.js вы можете сделать следующее:

res.setHeader('Content-Type', 'application/pdf');
res.end(//Actual response);

Попробуйте клонировать запрос с помощью responseType: arraybuffer

@Injectable()
export class DownloadInterceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        request = request.clone({
            responseType: 'arraybuffer'
        });
    }
}
Другие вопросы по тегам