前端传递uuid,后端根据uuid找到对应的记录,把数据填充导word文档中,以文件流的方式传递给前端实现下载功能,这样后端就不用先保存再根据路径下载了

这是重点,必须加,不然下载的文件是乱码

{responseType: 'blob'}
//下载功能async download(row){ let formData = new FormData();formData.append("uuid", row.uuid);const { data: res } = await request.post("download",formData,{responseType: 'blob'});// console.log(res)// return//下载文件let blob = new Blob([res], {type: "application/msword",});let objectUrl = URL.createObjectURL(blob); // 创建URLconst link = document.createElement("a");link.href = objectUrl;link.setAttribute("download", row.studentname + '.docx');link.click(); // 下载文件URL.revokeObjectURL(objectUrl); // 释放内存},

主要代码

        f = BytesIO()# 保存doc文档document.save(f)f.seek(0)filename = quote('demo.docx')// 中文文件名编码# rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)return send_file(f, download_name=filename,as_attachment=True)

完整代码

    def post(self):uuid = request.form.get('uuid')# uuid = request.args.get("uuid")order_obj = Addorder.query.filter_by(tabs_id=uuid).first()# 前置信息agent_name = order_obj.agent_nameorder_id = order_obj.order_idstudentname = order_obj.studentnamesex = order_obj.sex---------------------------------------------------------------------------------------------------------------# 构建doc对象document = Document()if order_obj.school_list:school_list = eval(order_obj.school_list)# 操作文档标题document.add_heading('前置信息', 0)# 操作段落文本document.add_paragraph('中介名称')document.add_paragraph(agent_name, style='List Bullet')# 操作段落文本document.add_paragraph('订单号')document.add_paragraph(order_id, style='List Bullet')# 操作段落文本document.add_paragraph('学生姓名')document.add_paragraph(studentname, style='List Bullet')# 操作段落文本document.add_paragraph('性别')document.add_paragraph(sex, style='List Bullet')# 操作段落文本document.add_paragraph('学校列表')infos_list = []for i in school_list:for j in i['zhuanye']:info_list = []info_list.append(i['schoolname'])info_list.append(j['major'])info_list.append(j['link'])infos_list.append(tuple(info_list))infos_tuple = tuple(infos_list)# print(len(infos_tuple))# print(infos_tuple)# 添加表格,rows设置行 cols设置列table = document.add_table(rows=1, cols=3)# 首行设置背景色rows = table.rows[0]for cell in rows.cells:shading_elm = parse_xml(r'<w:shd {} w:fill="D9D9D9"/>'.format(nsdecls('w')))cell._tc.get_or_add_tcPr().append(shading_elm)hdr_cells = table.rows[0].cells# 设置列名hdr_cells[0].text = '学校名称'hdr_cells[1].text = '专业'hdr_cells[2].text = '链接'# 操作写入行for schoolname, major, link in infos_tuple:row_cells = table.add_row().cellsrow_cells[0].text = schoolnamerow_cells[1].text = majorrow_cells[2].text = linkdocument.add_page_break()if order_obj.motivation:# 动机motivation = eval(order_obj.motivation)# document = motivations(document,motivation)# 操作文档标题document.add_heading('动机', 0)# 操作段落文本reason = document.add_paragraph('喜欢这个专业的原因?(兴趣起源、家庭背景氛围对你的影响,提供一个小事例,使你对这个专业或领域产生兴趣) ')# 段落添加内容run = reason.add_run('是否润色:')# 对run内容加粗run.bold = True# 设置run字体run.font.size = Pt(12)document.add_paragraph(motivation['moti1'], style='List Bullet')# 操作段落文本acamadic = document.add_paragraph('是否有具体的学术兴趣点,例如金融可以精确至投资、证券;教育可以精确至数字科技对教学评估的影响;药理可以精确至专门针对癌症的研究成果关注;材料学可以精确至陶瓷性能;数字媒体可以精确至大数据分析/云端储存;法律可以精确至公司法、未成年人法……具体些会提升PS个性化 ')# 段落添加内容run = acamadic.add_run('是否润色:')# 对run内容加粗run.bold = True# 设置run字体run.font.size = Pt(12)document.add_paragraph(motivation['moti2'], style='List Bullet')# 操作段落文本recent = document.add_paragraph("最近社会上的热门事件中,是否有与你申请的专业方向相关的事件?请谈一谈你对此的观点(该事件引发了你对目标专业的哪些思考,对于你纵深去学习目标专业有何启发,暴露了目标专业或领域的哪些弊端或契机)")# 段落添加内容run = recent.add_run('是否润色:')# 对run内容加粗run.bold = True# 设置run字体run.font.size = Pt(12)document.add_paragraph(motivation['moti3'], style='List Bullet')document.add_page_break()-------------------------------------------------------------------------------------------------------------------# document.save('tet.docx')f = BytesIO()# 保存doc文档document.save(f)f.seek(0)filename = quote('demo.docx')# rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)return send_file(f, download_name=filename,as_attachment=True)

生成的文档

flask vue 文件流的方式下载word相关推荐

  1. SpringBoot+Vue+Itext实现前端请求文件流的方式下载PDF

    场景 SpringBoot加itext实现PDF导出: SpringBoot加itext实现PDF导出_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面实现导出pdf的基础上,怎样结合 ...

  2. ASP.NET使用文件流的方式下载文件

    //以字符流的形式下载文件 string filePath = "D://dome.doc";                 FileStream fs = new FileSt ...

  3. SpringBoot+Vue+Itext实现前端请求文件流的方式导出PDF时在指定位置添加照片

    场景 SpringBoot+Vue+Itext实现前端请求文件流的方式下载PDF: SpringBoot+Vue+Itext实现前端请求文件流的方式下载PDF_BADAO_LIUMANG_QIZHI的 ...

  4. response以流的方式下载文件

    response以流的方式下载文件 /*** 文件下载* @param worldName 获取前端传进来的文件名* @param response*/@GetMapping("/fileD ...

  5. vue 在线预览、下载word、pdf文件

    vue 在线预览.下载word.pdf文件 最近项目用vue-cli3要实现word和pdf文档的在线预览和下载,在网上看到各位大佬们各种办法,发现踩坑无数,还是没弄出来,最后发现还是是自己想复杂了 ...

  6. java 看书浏览器官_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  7. java 读取浏览器_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过URL预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  8. java用浏览器下载文件_JAVA读取文件流,设置浏览器下载或直接预览操作

    最近项目需要在浏览器中通过url预览图片.但发现浏览器始终默认下载,而不是预览.研究了一下,发现了问题: // 设置response的header,注意这句,如果开启,默认浏览器会进行下载操作,如果注 ...

  9. JAVA 实现返回PDF文件流并进行下载

    JAVA 实现返回PDF文件流并进行下载 首先确保本地存放pdf 保证通过路径可以拿到文件 我这边把pdf放在e盘下的目录 1.前台方法 原生ajax 发送请求返回文件流进行下载 function d ...

最新文章

  1. linux操作系统学习网站整理(100个)
  2. 上传图片到linux返回url,Springboot 将前端传递的图片上传至Linux服务器并返回图片的url(附源码)...
  3. 用python查询数据库_用python 做数据库查询
  4. python绘制3维图-python——绘制二元高斯分布的三维图像,
  5. codevs 4560 NOIP2015 D2T2 子串
  6. dnn模型 list index out of range_基于svm的财务预警模型
  7. tomcat如何增大并发_高并发环境下如何优化Tomcat性能
  8. Skyline软件二次开发初级——1如何在web页面中添加控件和加载三维地图数据
  9. 按键精灵文字识别插件_按键精灵课程学习目录
  10. 外星人电脑装linux双系统,在外星人电脑上安装windows10和ubuntu16.04双系统小记
  11. mysql从5.7平滑升级到8.0.27
  12. 获取海康摄像机的rtsp流,并用VLC测试
  13. epoch mysql_PostgreSQL中epoch的用法
  14. 案例4加减乘除四则运算
  15. 怎么将网站迁移到云服务器上,云服务器网站迁移到虚拟主机
  16. java执行数据库数据迁移
  17. 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引。
  18. 滴滴小程序框架Mpx2.0
  19. 图解Windows10+优麒麟双系统安装
  20. PTA 礼尚往来(递推)

热门文章

  1. PVE踩坑实录2设置无线网卡
  2. 如何用Python做一个游戏防沉迷程序
  3. mysql常见的跳过密码登录方式
  4. AFNetworking网络请求详解
  5. 小游戏实现---三子棋至N子棋
  6. 一场AI玩家趴,一场UP主面基,rumor周末去哪里浪了?
  7. 游戏系统开发笔记(九)——构建战斗系统
  8. linux按键驱动设计(V3S开发板)
  9. 闪电博尔特100枪1000环夺冠,超人100枪10环垫底出局 程序中少了个大于号 覆盖结果
  10. EDI成为变革航运和港口行业的工具