在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ nodejs下載excel,怎么在前端請求并保存成xlsx文件?

nodejs下載excel,怎么在前端請求并保存成xlsx文件?

比如我的node端是這樣寫的:

clipboard.png

或者使用exceljs 生成的

clipboard.png

按照正常的邏輯,我在前端請求這個地址就可以直接下載這個excel文件的,但是不行啊。

我又在網(wǎng)上搜,說是要寫成這樣:

clipboard.png

點擊一個按鈕,然后發(fā)送請求,上面是請求那個node端接口后,執(zhí)行的代碼。

是可以請求到的

clipboard.png

這是打印出來的response

clipboard.png

可以下載文件,這個文件是這樣的

clipboard.png

怎么解決?或者有更好的辦法么?

哦, 直接在node端 生成excel ,我也試過了,哎、、、、


更新

現(xiàn)在我是這樣寫的
clipboard.png

文件也是可以生成的

clipboard.png

但是前端怎么請求呢?

前端我用的react寫的,
點擊一個按鈕,
現(xiàn)在用a鏈接,form都不好使

clipboard.png

頁面都會跳轉

對了,為了支持前端路由

node端 還應用了connect-history-api-fallback

clipboard.png

clipboard.png

求大神指點啊,

感謝,感謝

回答
編輯回答
還吻

node中使用node-xlsx中間件保存為xlsx格式的,需要保存的data類型是數(shù)組,前端再用a連接去指向保存后的地址。
const xlsx = require('node-xlsx').default
var buffer = xlsx.build([{name: "mySheetName", data: newArr}]);
fs.writeFileSync(Math.random()+".xlsx", buffer,"binary")

2017年5月3日 09:47
編輯回答
醉淸風

你試試用這個模塊操作excel (node-xlsx)

2018年7月24日 11:08
編輯回答
夏木

應該是 exceljs 數(shù)據(jù)寫入有問題,可以參考 https://mp.weixin.qq.com/s/ZM... 第三部分。

2018年6月2日 02:22
編輯回答
吃藕丑

感謝大家。

2017年3月17日 08:31
編輯回答
心癌

正好前端時間我也有個node生成xlsx,前端下載的需求。

我貼一下nodejs的代碼,你可以參考一下:

const buffer = xlsx.build([{ name: "coverSheet", data: excelData }]);
const fileName = new Date().getTime() + '.xlsx'
const filtPath = path.resolve(__dirname, '../', fileName)
fs.writeFileSync(filtPath, buffer, 'binary');
res.sendFile(filtPath)

前端我并沒有采用Blob去下載文件,考慮到兼容性,所以使用的form表單提交,可以實現(xiàn)瀏覽器下載文件。

另外我覺得最簡單的辦法就是node生成xlsx文件,然后瀏覽器直接通過url下載。但是看你的說明,也嘗試過不過沒成功。我懷疑是你并沒有把生成的xlsx所在目錄設置為資源目錄,導致瀏覽器找不到該位置。

---- 第一次更新 ----
我可以貼一下我這前端form下載的代碼供你參考,無跳轉。

// 前端
function download(url, params){
  let tempForm = document.createElement('form')
  tempForm.action = url
  tempForm.method = 'post'
  tempForm.style.display = 'none'
  for (var x in params) {
      let opt = document.createElement('textarea')
      opt.name = x
      opt.value = params[x]
      tempForm.appendChild(opt)
  }
  document.body.appendChild(tempForm)
  tempForm.submit()
  return tempForm
}

如果直接下載文件,確實是要改connect-history-api-fallback的,增加一條rewrites才可以。

2017年1月16日 18:21
編輯回答
心癌

這個需求我們就是一個a鏈接的href指向這個地址并帶上相關參數(shù)就可以了(比如www.baidu.com? a = 1 & b = 2說白了就是個get請求),后端根據(jù)參數(shù)查詢相關數(shù)據(jù)寫入excel,然后把文件寫到服務器上。我覺得是你node端沒有處理好這個數(shù)據(jù),邏輯是沒有問題的。

2017年4月5日 15:22