私はMEANスタックアプリケーションを開発中で、バックエンド(Express)からフロントエンド(Angular)にpdfを表示しようとしています。しかし、毎回、ファイルは送信中に壊れてしまいます。誰にもアイデアはありますか?ここ は(簡体字)私のコードです:Express Angular - Serve PDF
バックエンド:
import * as express from "express";
import * as fs from "fs";
myController.getPdf(req:express.Request, res:express.Response):void {
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Length', fs.statSync('myPdf.pdf').size);
fs.createReadStream('myPdf.pdf).pipe(res);
}
フロントエンド:
import {Http,ResponseContentType} from "@angular/http";
constructor(@Inject(Http) private _http:Http) {}
this._http.get('ENDPOINT', {responseType: ResponseContentType.ArrayBuffer})
.map(response => {
window.open(URL.createObjectURL(
new Blob([response],{type:'application/pdf'})
))});
編集:ミドルウェア:
import * as compression from "compression";
import * as zlib from "zbil";
import * as express from "express";
import * as bodyParser from "body-parser";
import * as session from "express-session";
import * as passport from "passport";
import * as morgan from "morgan";
import * as helmet from "helmet";
application: express.Application;
let _root = process.cwd();
application.use(compression({
level: zlib.Z_BEST__COMPRESSION,
threshold: "1kb"
}));
application.use(express.static(_root + "/node_modules/"));
application.use(express.static(_root + "/jspm_packages/"));
application.use(express.static(_root + "/client/dev/"));
application.use(bodyParser.json());
application.use(session({
secret: 'abcd',
saveUnitialized: true,
resave: true,
}));
application.use(passport.initialize());
application.use(passport.session());
application.use(morgan("dev"));
application.use(helmet());
うーん...でも、この変更で、ファイルがまだ出力が読めません。 中古のミドルウェアを追加しました。おそらくそのうちの1つが私の送信を乱していますか? –