Foxtable(狐表)用户栏目专家坐堂 → [杰哥的BS技术分享]解决e.writeBook和e.WriteReportAsPDF无法在JQuery、Vue、Uniapp体系里触发下载的方案,完美实现[异步生成+异步发送],彻底杜绝文件重复写入导致磁盘Stream IO冲突


  共有23949人关注过本帖树形打印复制链接

主题:[杰哥的BS技术分享]解决e.writeBook和e.WriteReportAsPDF无法在JQuery、Vue、Uniapp体系里触发下载的方案,完美实现[异步生成+异步发送],彻底杜绝文件重复写入导致磁盘Stream IO冲突

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1275 积分:7922 威望:0 精华:4 注册: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/7/12 8:22:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ap9709130
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1468 积分:11440 威望:0 精华:0 注册:2013/11/24 22:10:00
  发帖心情 Post By:2022/3/31 17:58:00 [只看该作者]

 学习啊 高手

 回到顶部
帅哥哟,离线,有人找我吗?
aix
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:209 积分:6151 威望:0 精华:0 注册:2012/4/29 13:09:00
  发帖心情 Post By:2022/3/31 18:33:00 [只看该作者]

 学习

 回到顶部
帅哥哟,离线,有人找我吗?
fivetable
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:334 积分:3040 威望:0 精华:0 注册:2018/5/28 22:12:00
  发帖心情 Post By:2022/3/31 18:54:00 [只看该作者]

内容太高级了,无法理解

 回到顶部
帅哥哟,离线,有人找我吗?
lgzhao
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2085 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2022/3/31 19:00:00 [只看该作者]

杰哥出品 必属精品

 回到顶部
帅哥哟,离线,有人找我吗?
laipiwen
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:378 积分:2845 威望:0 精华:0 注册:2015/4/29 11:50:00
  发帖心情 Post By:2022/3/31 20:32:00 [只看该作者]

谢谢分享

 回到顶部
帅哥哟,离线,有人找我吗?
jyh7081
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:960 积分:8478 威望:0 精华:0 注册:2012/10/3 13:25:00
  发帖心情 Post By:2022/4/1 9:00:00 [只看该作者]

谢谢!

 回到顶部
美女呀,离线,留言给我吧!
Phoebe菲比
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:158 积分:998 威望:0 精华:0 注册:2021/8/17 15:39:00
  发帖心情 Post By:2022/4/1 9:25:00 [只看该作者]

支持杰哥!!

 回到顶部
帅哥哟,离线,有人找我吗?
happyft
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1925 积分:17344 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/4/1 9:38:00 [只看该作者]

学习

 回到顶部
帅哥哟,离线,有人找我吗?
teng0731
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:459 积分:3471 威望:0 精华:0 注册:2011/6/6 11:22:00
  发帖心情 Post By:2022/4/1 10:20:00 [只看该作者]

谢谢!

 回到顶部
总数 44 1 2 3 4 5 下一页