Foxtable(狐表)用戶欄目專家坐堂 → [杰哥的BS技術分享]解決e.writeBook和e.WriteReportAsPDF無法在JQuery、Vue、Uniapp體系里觸發下載的方案,完美實現[異步生成+異步發送],徹底杜絕文件重復寫入導致磁盤Stream IO沖突


  共有1091人關注過本帖樹形打印復制鏈接

主題:[杰哥的BS技術分享]解決e.writeBook和e.WriteReportAsPDF無法在JQuery、Vue、Uniapp體系里觸發下載的方案,完美實現[異步生成+異步發送],徹底杜絕文件重復寫入導致磁盤Stream IO沖突

帥哥喲,離線,有人找我嗎?
chen37280600
  1樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:四尾狐 帖子:992 積分:6231 威望:0 精華:3 注冊:2017/12/31 14:53:00
[杰哥的BS技術分享]解決e.writeBook和e.WriteReportAsPDF無法在JQuery、Vue、Uniapp體系里觸發下載的方案,完美實現[異步生成+異步發送],徹底杜絕文件重復寫入導致磁盤Stream IO沖突  發帖心情 Post By:2022/3/31 17:48:00 [只看該作者]

1存在問題

在狐表weui教程里,直接通過Http請求,e.writeBooke.WriteReportAsPDF都是可以順利生成excel文件下載,或者是生成pdf下載


此主題相關圖片如下:1.png
按此在新窗口瀏覽圖片


但是使用第三方框架時,也就是在Jquery的Ajax里、Vue的Axios里、Uniapp的Request方法里,都無法觸發下載

但是在F12控制臺里,能看到狐表已經做出回復,能收到服務器端發過來的數據


此主題相關圖片如下:7.png
按此在新窗口瀏覽圖片


此主題相關圖片如下:2.png
按此在新窗口瀏覽圖片



很多人以為是狐表的bug,這個生成方法只能用在weui。于是就用回傳統的方法

1先本地生成Excel/PDF

2然后把url鏈接發送給前端

3前端再觸發下載


這種模式有2個問題

1生成Excel或者專業報表的PDF時,是主線程同步的,多人用的時候,會出現性能問題。

2你稍微不注意,可能會并發同時生成同名同目錄文件,導致文件重復寫入占用,磁盤IO寫入報錯。嚴重的還會讓程序一直在寫入,把cpu飆升到100%占用(我最近遇到了)

狐表高開文檔原文:“

1、雖然WriteFile是異步執行的,但是Excel報表的生成和保存卻是和主線程同步的,且Excel報表的生成并非很高效,所以用戶量比較大的時候,會影響效率。

2、整個過程要分別保存和讀取一次文件,我們知道計算機性能的瓶頸就是硬盤的讀寫,所以這同樣會影響效率。

3、由于要保存為實際的文件,所以容易出現文件名沖突,假定有多個用戶同時訪問,上面的代碼肯定會出錯,雖然可以采用一些手段避免同名沖突,但畢竟增加了工作量。

所以最好的方案:還是用e.writeBooke.WriteReportAsPDF,實現【異步生成+異步發送】

2問題分析

其實不是狐表有bug,而是你沒理解e.writeBook和e.WriteReportAsPDF是通過什么機制,實現了“異步生成+異步發送”

實際上,這2個方法,都是把文件,直接生成為Blob二進制格式的文件流,直接發送給瀏覽器,瀏覽器已經成功接收了,見下圖


此主題相關圖片如下:3.png
按此在新窗口瀏覽圖片

瀏覽器沒能觸發下載,是前端代碼的問題,并不是狐表的問題。需要改動一些js代碼。

3解決方法

3.1狐表后端代碼

HttpRequest事件代碼:(非常簡單,跟幫助文檔一樣,保持不變)

Sel ect Case e.path
    Case "emp.xls" '下載為文件
        Dim Book As New XLS.Book(ProjectPath & "Attachments\資料卡.xls")
        book.AddDataTable("員工","數據源名稱","Sel ect * from {員工} where 姓名 = '王偉'")
        e.WriteBook(book,"emp.xls",False)
End Sele ct


3.2JQuery和Vue體系的改動


以下內容只有回復后才可以瀏覽

成功效果:

此主題相關圖片如下:6.png
按此在新窗口瀏覽圖片

4效果體驗

A2迷你產品報價系統,里面的報價單模塊,有帶圖導出Excel功能體驗,可體驗下這種【異步生成+異步發送】的效率



=====================================================================
杰哥免費分享的web系統






===============================================================
順便總結以前分享過的帖子,方便大家學習

聯系QQ:2385350359



















[此貼子已經被作者于2022/3/31 18:13:14編輯過]

 回到頂部
帥哥喲,離線,有人找我嗎?
ap9709130
  2樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:六尾狐 帖子:1379 積分:10713 威望:0 精華:0 注冊:2013/11/24 22:10:00
  發帖心情 Post By:2022/3/31 17:58:00 [只看該作者]

 學習啊 高手

 回到頂部
帥哥喲,離線,有人找我嗎?
aix
  3樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:幼狐 帖子:187 積分:5537 威望:0 精華:0 注冊:2012/4/29 13:09:00
  發帖心情 Post By:2022/3/31 18:33:00 [只看該作者]

 學習

 回到頂部
帥哥喲,離線,有人找我嗎?
fivetable
  4樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:童狐 帖子:289 積分:2633 威望:0 精華:0 注冊:2018/5/28 22:12:00
  發帖心情 Post By:2022/3/31 18:54:00 [只看該作者]

內容太高級了,無法理解

 回到頂部
帥哥喲,離線,有人找我嗎?
lgzhao
  5樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:童狐 帖子:225 積分:1649 威望:0 精華:0 注冊:2017/11/19 9:46:00
  發帖心情 Post By:2022/3/31 19:00:00 [只看該作者]

杰哥出品 必屬精品

 回到頂部
帥哥喲,離線,有人找我嗎?
laipiwen
  6樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:小狐 帖子:318 積分:2329 威望:0 精華:0 注冊:2015/4/29 11:50:00
  發帖心情 Post By:2022/3/31 20:32:00 [只看該作者]

謝謝分享

 回到頂部
帥哥喲,離線,有人找我嗎?
jyh7081
  7樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:四尾狐 帖子:918 積分:8025 威望:0 精華:0 注冊:2012/10/3 13:25:00
  發帖心情 Post By:2022/4/1 9:00:00 [只看該作者]

謝謝!

 回到頂部
美女呀,離線,留言給我吧!
Phoebe菲比
  8樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:幼狐 帖子:135 積分:871 威望:0 精華:0 注冊:2021/8/17 15:39:00
  發帖心情 Post By:2022/4/1 9:25:00 [只看該作者]

支持杰哥!!

 回到頂部
帥哥,在線噢!
happyft
  9樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:七尾狐 帖子:1758 積分:14736 威望:0 精華:0 注冊:2014/7/29 19:09:00
  發帖心情 Post By:2022/4/1 9:38:00 [只看該作者]

學習

 回到頂部
帥哥喲,離線,有人找我嗎?
teng0731
  10樓 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:一尾狐 帖子:425 積分:3170 威望:0 精華:0 注冊:2011/6/6 11:22:00
  發帖心情 Post By:2022/4/1 10:20:00 [只看該作者]

謝謝!

 回到頂部
總數 27 1 2 3 下一頁
国产精品边做奶水狂喷无码