2017-11-29 4 views
0

버튼 클릭 후 pdf를 생성하고 다운로드하는 기능을 만들고 있습니다. 나는 표현을 백엔드로 사용하고 반응/readux/axios를 전면으로 사용하고 있습니다.PDF 파일을 API에서 다운로드

내 백엔드가 내 앞면과 다른 포트에서 실행됩니다.

그래서 axios로 API를 호출하고, pdf를 작성하고 sendFile로 응답하십시오.

우편 게시자에게 내 게시물 요청을 테스트 할 때 모든 것이 효과적입니다.

내가 파일에 대한 다운로드 만의 경우에 작동

export function generatePdf(data){ 
return dispatch => { 

    axios.post(`${API_ENDPOINT}api/facture-pdf`, 
     { data: data }, 
     { headers: { 
      'Content-Type': 'application/json', 
      'x-access-token': localStorage.getItem('token') 
     } 
    }) 
    .then(function (response) { 
     return response.data; 
    }) 
    .then(pdf => { 
     window.open(`${API_ENDPOINT}api/${type}-pdf/${data.Référence}`, '_blank') 
    }) 
} 

답변

0

router.post('/', function(req, res, next){ 

var data = req.body.data 

options = {}; 
// init html string 
var html = ejs.renderFile(__dirname + '/template/facture.ejs', {data: data}, options, function(err, str){ 
    if(err){ 
     return err; 
    } 
    return str; 
}); 
// create pdf 
conversion({ html: html}, (err, pdf) => { 
    var output = fs.createWriteStream(`documents/factures/${data.Référence}.pdf`); 
    pdf.stream.pipe(output); 

}); 

var filepath = path.join(pathToDocument, '/factures/',`${data.Référence}.pdf`); 

res.download(filepath); 

}); 

Axios의 호출을 표현하는 파일을 다운로드하지 않습니다 내 응용 프로그램을 반응에서 그것을 사용하는 'GET '요청. 'GET'요청을 수락하는 API 만 간단하게 만들 수 있습니다. 그리고 클라이언트 측에서는 어떤 동작에서 window.open ('서버 전체 url과 API 경로')를 호출 할 수 있습니다.

위에서 수행하면 파일 다운로드가 시작됩니다.

관련 문제