Перехватчик 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'
});
}
}