说明:
本文介绍的下载文件,不需要服务端存在导出下载的文件, 如果针对服务端将生成文件存储下来的情况,则前端可以简单创建隐藏的链接并实现点击下载即可,可以参照本文或笔者以往写的 《JS实现下载文件并重命名》
一、小知识:
1. chrome://downloads 或 edge://downloads 可查看浏览器文件下载历史
2. HTML中注意“button”标签有个坑:
不同于过去的<input type="button">, HTML5的<button>标签有个Type属性,值为:button|reset|submit,如果不提定该属性,在不同的浏览器中会表现为不同的type默认值,比如笔者项目中原来button没加type属性, 造成原本已经将提交请求在button.click中实现了,在不加“return false;”的情况下,意外又另外提交了submit form的请求 (原因就是所用的Chrome在button的type属性不指明的情况默认为submit)
https://www.w3schools.com/tags/att_button_type.asp 中有说明:Tip: Always specify the type attribute for the <button> element. Different browsers may use different default types for the <button> element.
二、以Ajax提交异步请求导出csv文件
1. 前端通过Ajax异步Post生成下载文件内容的请求【$.post("url",{objectdata},callbackfunc】(如果此处以非异步比如$.ajax请求的async为false,则会造成等待响应时页面卡死),后端生成内容并响应后(以下为.Net WebApi实现的方法):
2. 前端$.post的回调中根据响应的文本内容创建Blob对象供下载生成文件:
三、Submit Form提交请求导出csv文件
1. 后端实现以Submit Form提交过来的下载文件提求,只需简单将要导出成文件的内容生成MemoryStream并以File类型的ActionResult返回即可,前端浏览器收到响应即会下载文件到本地DownLoad文件夹(从Submit Form到浏览器接收到响应这过程也是异步的,不会造成页面卡死)
js实现文件下载有很多种方式,可以再参考以下:
js实现文件下载有很多种方式,本文主要介绍7种。_js文件下载_小新报道啦的博客-CSDN博客
一、a标签下
二、form标签下载
三、window.open下载
四、iframe下载
五、location.href下载
六、ajax下载(Blob - 利用Blob对象生成Blob URL)
七、ajax下载(Data URL - base64编码后的url)
详细见: https://blog.csdn.net/ljy123w/article/details/123438648