2017-10-29 14 views
0

나는 pdfkit과 함께 express.js를 사용하고 있으며, pdf를 생성하고 웹 브라우저에서 강제로 다운로드하려고합니다.express.js로 pdf를 강제로 다운로드 할 수 없습니다.

pdf가 저장된 정적 위치를 정의했지만이 위치를 읽고 파일을 다운로드하려고 할 때 아무 일도 일어나지 않습니다. 헤더도 설정하려고했지만 작동하지 않습니다.

서버 및 프런트 엔드가 실행되는 포트와 관련이있을 수 있음을 읽었습니다. 내 경우에는이 있습니다 : 4200 (각도) 및 8080 (Node.js를)

여기 서버 코드의 조각입니다 :

var downl = doc.pipe(fs.createWriteStream('C:/Users/Martyna/Desktop/test pdfow/out.pdf')); 

doc.end(); 

downl.on('finish', function() { 
    res.download('C:/Users/Martyna/Desktop/test pdfow/out.pdf', 'out.pdf'); 
}) 
+0

어떻게 클라이언트의 요청을 만들고있다 : 파일이 브라우저에 표시해야하는 브라우저에 표시하기 위해 다운로드보다는

Content-Type: application/pdf Content-Disposition: attachment; filename="You_File_Name.pdf" 

을 볼 파일을하려면? 브라우저의 dev 도구의 네트워크 섹션에서 무엇을 볼 수 있습니다 : 요청을 보았고 응답이 다시 나타납니다. – skirtle

+0

createAuthHeaders() { this.loadToken(); this.options는 = 새로운 RequestOptions ({ 헤더 : 새로운 헤더 ({ '콘텐츠 유형': '응용 프로그램/JSON', '인증'this.authToken }) }); } loadToken() { this.authToken = localStorage.getItem ('token'); } testGetId (cv : Cv) { this.createAuthHeaders(); this.http.get (this.domain + '/ konto-uzytkownika /'+ cv.cvId, this.options);을 반환합니다. \t \t \t \t \t \t \t \t \t : 내가 추가 한 – tys

+0

그리고 내 개발 도구에 나는 적절한 응답 유형을 얻을 res.writeHead (200, { \t \t \t \t \t \t \t '콘텐츠 유형': '응용 프로그램/PDF', \t \t \t \t \t \t \t 'Content-Disposition': '첨부 파일; filename = out.pdf ' \t \t \t \t \t \t \t}); 그리고 내 콘솔에 오류가 발생합니다. 오류 : 보낸 후 헤더를 설정할 수 없습니다. – tys

답변

0

당신은 당신의 응답에 아래의 헤더를 추가해야합니다.

Content-Type: application/pdf 
Content-Disposition: inline; filename="You_File_Name.pdf" 
+0

서버 응답을 설정하고 있지 않다하더라도 "응용 프로그램/PDF" :} – tys

+0

잘못하고 있습니다. res.set ('Content-Type', 'application/pdf'); res.set ('Content-Type', 'attachment; 파일 이름 = "You_File_Name.pdf"'); res.sendFile (__ dirname, 'files/out.pdf'); –

+0

알았습니다! 콘텐츠 유형 및 콘텐츠 처리 설정은 실제로 도움이되었다고 말했듯이, 감사합니다!또한 클라이언트 사이트에서 Blob에 responseType을 지정하고 http get 메서드에서 get this 메소드를 작성했습니다. testGetId (cv : Cv) { this.createAuthHeaders2(); 이 .http.get (this.domain + '/ konto-uzytkownika /'+ cv.cvId, this.options) .subscribe (res => { console.log (res) var blob = new Blob ([ {type : 'application/pdf'}); saveAs (blob, "cv.pdf"); }}); } – tys