2017-11-29 24 views
0

ボタンをクリックした後にpdfを作成してダウンロードする関数を作成しています。バックエンドとしてexpressを、フロントとしてreactux/readux/axiosを使用しています。APIからPDFファイルをダウンロード

私のバックエンドは私のフロントとは異なるポートで動作します。

私はAxiosでAPIを呼び出してから、pdfを作成してsendFileで応答します。

私の投稿要求を郵便番号でテストすると、すべてがうまくいきます。

私からそれを使用して、私はアプリが

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コール

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

は、ファイルのダウンロードは「GETの場合にのみ動作表現のファイルをダウンロードしない反応'要求。 「GET」リクエストを受け入れるAPIを作成するだけで簡単に作成できます。 クライアントサイドからは、いくつかのアクションでwindow.open( 'server full url with api path')を呼び出すことができます。

上記を実行すると、ファイルのダウンロードが開始されます。

関連する問題