2017-11-15 17 views
2

나는 사용자가 일부 데이터를 입력합니다 node.js + 익스프레스 응용 프로그램을 구축하고 pdfkit와 함께 파일을 생성하고 파일은 사용자에게 전송됩니다. 나는 파일을 성공적으로 생성 할 수 있는데, 문제는 생성 된 파일을 다운로드 할 때 비어있는 것이다. 나도 PDF 파일을 열 수 없다, 독자 (미리보기, macOS의 네이티브 리더)는 파일이 비어 있다고 말한다. 서버에서 올바르게 생성되고있는 동안, 빈 파일을 반환 다운로드

var express = require('express'); 
var router = express.Router(); 
var guid = require('guid'); 
var PDFDocument = require('pdfkit'); 
var fs = require('fs'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/criar', function(req, res, next) { 
    var filename = guid.raw()+'.pdf'; 
    var doc = new PDFDocument(); 
    doc.pipe(fs.createWriteStream(filename)); 

    doc.font('fonts/UbuntuMono-R.ttf') 
     .fontSize(25) 
     .text('Some text with an embedded font!', 100, 100); 

    doc.end(); 

    res.download(filename, 'rifas.pdf', function(err){ 
     if(!err){ 
      fs.unlink(filename); 
     } 
    }) 
}); 

module.exports = router; 

당신이 내 다운로드 한 파일이 비어있는 이유에 대해 어떤 생각을 가지고 있습니까 : 나는 다음과 같은 코드를 사용하고 있습니다?

감사합니다.

답변

3

실제 파일이 필요한가요? 그렇지 않으면 클라이언트에 직접 스트리밍 할 수 있습니다.

var express = require('express'); 
var router = express.Router(); 
var PDFDocument = require('pdfkit'); 
var fs = require('fs'); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/criar', function(req, res, next) { 
    var doc = new PDFDocument(); 
    doc.pipe(res); 

    doc.font('fonts/UbuntuMono-R.ttf') 
     .fontSize(25) 
     .text('Some text with an embedded font!', 100, 100); 

    doc.end(); 

}); 

module.exports = router; 
+0

완벽! 실제로 필자는 실제 파일을 필요로하지 않으므로 파일을 응답에 파이프하는 것으로 충분합니다. 감사합니다. –