首页 > 解决方案 > 从nodejs下载excel的问题

问题描述

我有一个端点,它只是从 mongoose 集合中获取整个数据并将其转换为 excel 文件,然后将其下载到客户端中。我正在使用xlsx-to-json-lc npm 包将猫鼬数据转换为 excel。

.get(cors.cors,(req,res)=>{
var wb = XLSX.utils.book_new();
StockData.find({})
.then(async (resp)=>{
    var ws = XLSX.utils.json_to_sheet(resp)
    var down = __dirname+'/public/exportdata.xlsx'
    XLSX.utils.book_append_sheet(wb,ws,"Sheet1")
    await XLSX.writeFile(wb,down)

    //everything is fine till here.excel got created

    res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    res.setHeader('Content-Disposition',"attachment; filename=" + path.join(__dirname,'../public/exportdata.xlsx') )

    response.end()

})

问题是当我从前端单击下载按钮时,excel 正在下载但它没有打开。收到错误“文件已损坏”。

在前端( reactjs )中使用文件保护程序npm 包

import fileSaver from 'file-saver' 

//some other code

axios.get("http://localhost:3000/excel",{},{
            headers: {
                    'authorization': "Bearer " + tok,
                     'Accept' : 'application/json',
                     'Content-Type': 'application/json',
                     'responseType': 'arraybuffer' 
                 }}
                )
        .then((resp)=>{
            var blob = new Blob([resp.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
            fileSaver.saveAs(blob, 'stockdata.xlsx');
            console.log('Downloaded')
        })

我在请求的 Accept 标头中也提供了application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,但没有成功。我不确定哪里出了问题。谁能帮我解决这个问题。

标签: node.jsreactjs

解决方案


推荐阅读