2

我正在使用 REST api,它向我发送带有文件信息(base64 内容、mime ...)的 json 数据。我想在 Chrome 中打开 PDF。URL.createObjectURL 是一个糟糕的解决方案,因为重定向后,我们无法下载文件。

因此,作为后端,我想将标头响应更改为“application/pdf”,并直接显示文件内容。

我在 HttpClient Interceptors 模块中搜索:

   @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 页面中。

那么,有可能吗?有角?与节点?

非常感谢,

4

2 回答 2

2

响应标头由服务器设置和发送。使用 express,您可以选择设置响应标头,如下所示:

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);
于 2018-06-21T10:36:48.810 回答
-1

尝试使用 responseType 克隆请求:arraybuffer

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

        request = request.clone({
            responseType: 'arraybuffer'
        });
    }
}
于 2018-06-21T11:25:40.763 回答