首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浏览器端用JS创建和下载文件

浏览器端用JS创建和下载文件

作者头像
csxiaoyao
发布于 2018-05-11 07:26:46
发布于 2018-05-11 07:26:46
5K00
代码可运行
举报
文章被收录于专栏:csxiaoyaocsxiaoyao
运行总次数:0
代码可运行

浏览器端用JS创建和下载文件

1 需求

前端需要把获取的数据生成文件让用户下载,按照以往生成 a 标签 href 指向目的文件,不仅需要有已经生成的文件服务器路径,而且很多浏览器支持类型的文件会默认加载而不提示用户选择路径下载

2 解决方案

2.1 下载取代加载:H5标签属性

HTML5a 标签增加了 download 属性,点击链接时浏览器不会打开链接指向的文件,而是改为下载(目前只有chrome、firefox和opera支持),下载时会直接使用链接的名字来作为文件名(可给 download 加上文件名进行修改,如: download=“file.js”)

2.2 生成文件:DataURI

用js将内容生成文件可以仿照图片 DataURI 的方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<img src=”data:image/gif;base64,R0lGOXXXXX">

封装成一个下载方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function downloadFile(aLink, fileName, content){
    aLink.download = fileName;
    aLink.href = "data:text/plain," + content;
}

调用 downloadFile 后,用户点击链接触发浏览器下载

3 改进方案

进一步放宽条件

  • 取消下载类型限制
  • 取消点击过程,直接下载

解决文件类型的问题,可用浏览器新APIURL.createObjectURL)来解决,URL.createObjectURL 通常用来创建图片 DataURI 显示图片,这里用来下载文件,参数是 File对象(通过input[type=file]选择的文件)或 Blob 对象(二进制大对象),让浏览器自动设定文件类型

解决类型限制:用 content 创建 ObjectURL 并赋值给 aLink 即可解决文件类型的限制

文件自动下载:构建UI点击事件,再自动触发

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function downloadFile(fileName, content){
    var aLink = document.createElement('a');
    var blob = new Blob([content]);
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("click", false, false);//initEvent 不加后两个参数在FF下会报错
    aLink.download = fileName;
    aLink.href = URL.createObjectURL(blob);
    aLink.dispatchEvent(evt);
}

调用downloadFile,文件自动下载

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年06月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ubuntu安装SqlServer
选择版本 8 ,设置密钥(HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G),设置SA密码。
shaoshaossm
2022/12/27
2.5K0
Ubuntu安装SqlServer
SQL Server in Docker 还原数据库
上一回演示了如果在Docker环境下安装SQL Server,这次我们来演示下如何还原一个数据库备份文件到数据库实例上。
星哥玩云
2022/08/18
2.4K0
SQL Server in Docker 还原数据库
【SQL Server on Linux】Linux下安装SQL Server 及SqlServer基本命令CRUD
前天听Mr.Ding说Linux上也可以安装SqlServer了,正好学习.net也需要安装SqlServer,正好按照Mr.Ding的教程走一遍,反正服务器也是闲着,可着劲折腾去吧。
浩Coding
2019/07/03
3.9K0
【SQL Server on Linux】Linux下安装SQL Server 及SqlServer基本命令CRUD
Mac上用docker安装SQLserver
1. 搜索并下载镜像 ~$docker search mssql 可以看到microsoft下面mssql的不同平台的版本: pengjunzhe: ~$docker search mssql NAME DESCRIPTION STARS OFFICIAL AUTOMATED microso
悠扬前奏
2019/07/01
2.7K0
Golang 连接mssql sql server
package main import ( "database/sql" "fmt" "strings" ) import ( _ "github.com/mattn/go-adodb" ) type Mssql struct { *sql.DB dataSource string database string windows bool sa SA } type SA struct { user string passwd string por
李海彬
2018/03/20
5K0
Linux实现SqlServer数据库数据自动备份,并定期删除过期备份文件
实现Linux下远程连接SqlServer过程,或者搜索在Linux上安装Sqlcmd,上篇文章我们讲了在RedHat(或Centos)上安装sqlcmd,现在讲的是Ubuntu(或者Deepin)系列安装教程:
浩Coding
2019/07/02
4.6K0
Linux实现SqlServer数据库数据自动备份,并定期删除过期备份文件
Windows 11 安装 SQLSERVER 出现问题解决
装 sd 开心版的时候需要 SQLServer,结果各种方法试过了,一个劲的装不上。
繁依Fanyi
2025/04/22
4670
渗透测试之ASP Web提权
1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1.exe user
HACK学习
2019/08/06
4K0
【好文推荐】各种提权姿势总结
1.cmd拒绝访问就自己上传一个cmd.exe,自己上传的cmd是不限制后缀的,还可以是cmd.com cmd.txt cmd.rar等
信安之路
2018/08/08
2.5K0
【好文推荐】各种提权姿势总结
内网靶场初探
内容写的很乱,因为第一次搞,有点不太熟练,所以各位师傅简单看看就好,写的比较好的文章,可以参考这两个 https://xz.aliyun.com/t/11588#toc-0 https://mp.weixin.qq.com
用户9691112
2023/05/18
7650
内网靶场初探
实战渗透域森林+服务森林
之前在子域中子域中发现存在10.12.10.0/24网段,通过nbtscan发现存在10.12.10.3这台主机
FB客服
2021/10/11
1.5K0
NodeJS中使用mssql和tedious模块连接SQLServer数据库
最近看了下NodeJS下连接SQLServer的一些示例,发现NodeJs中有两个模块,一个是mssql,其npm地址是:https://www.npmjs.com/package/mssql;另外一个是:tedious,其npm地址是:https://www.npmjs.com/package/tedious,github对应的地址是:https://github.com/tediousjs/tedious
ccf19881030
2022/12/01
4.1K0
NodeJS中使用mssql和tedious模块连接SQLServer数据库
利用PowerShell复制SQLServer账户的所有权限
问题   对于DBA或者其他运维人员来说授权一个账户的相同权限给另一个账户是一个很普通的任务。但是随着服务器、数据库、应用、使用人员地增加就变得很枯燥乏味又耗时费力的工作。那么有什么容易的办法来实现这个任务吗? 当然,作为非DBA在测试甚至开发环境也会遇到这种问题,要求授予所有服务器数据库的某个权限给一个人的时候。我们是不是有什么其他办法提高效率? 解决方案   如果这个时候我们网上去搜索解决方案,大多数时候搜到的都是使用T-SQL解决方案,但是这又会产生下面几个小问题: 我们需要到目标服务器上执行这些脚本
用户1217611
2018/01/30
1.9K0
NodeJS使用mssql连接SQLServer出现"Incorrect syntax near the keyword \'user\'."
最近使用NodeJS的mssql模块连接SQLServer数据库出现了"Incorrect syntax near the keyword ‘user’."的错误,Google了一下发现原来我在SQLServer中使用了user作为表明,但是SQLServer中user是保留的关键字,不能被用于做表名或者变量名。所以解决方案很简单,直接重命名表名user为t_user或者其他的名称就OK了。
ccf19881030
2020/03/09
2.1K0
NodeJS使用mssql连接SQLServer出现"Incorrect syntax near the keyword \'user\'."
本地sql数据库怎么与远程sql数据库同步使用_sqlserver复制数据库
1.利用MySQL自身的数据库同步功能 2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的 3.利用专用的MySQL数据库同步软件
全栈程序员站长
2022/11/04
3.9K0
SQLServer 远程链接MySql数据库详解
Microsoft Windows XP Professional 版本2000 Service Pack 3
授客
2019/09/11
10.4K0
centos7.x中安装SQL Server
输入数字,选择所要安装的版本,然后在出现询问是否接受许可条款时,输入yes,回车继续下一步。
用户4988085
2021/07/16
3.3K0
使用Docker运行SQL Server
现在.net core已经跨平台了,大家也都用上了linux用上了docker。跟.net经常配套使用的SQL SERVER以前一直是windows only,但是从SQL Server 2017开始已经支持运行在docker上,也就说现在SQL Serer已经可以运行在linux下了。 下面在Ubuntu 16.4上演示安装并使用SQL Server 2019-CTP3.2
MJ.Zhou
2019/07/28
1.9K0
【转载】数据库链接字符串大集合
SQL Server 2005 SQL Native Client ODBC Driver 标准安全连接 Driver={SQL Native Client};Server=myServerAddress; Database=myDataBase;Uid=myUsername;Pwd=myPassword; 受信的连接 Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes; "Integrated Security=SSPI" 与 "Trusted_Connection=yes" 是相同的。 连接到一个SQL Server实例 指定服务器实例的表达式和其他SQL Server的连接字符串相同。 Driver={SQL Native Client};Server=myServerName/theInstanceName;Database=myDataBase; Trusted_Connection=yes; 指定用户名和密码 oConn.Properties("Prompt") = adPromptAlways Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase; 使用MARS (multiple active result sets) Driver={SQL Native Client};Server=myServerAddress;Database=myDataBase; Trusted_Connection=yes;MARS_Connection=yes; "MultipleActiveResultSets=true"与MARS_Connection=yes"是相同的。 使用ADO.NET 2.0作为MARS的模块。 MARS不支持ADO.NET 1.0和ADO.NET 1.1。 验证网络数据 Driver={SQL Native Client}; Server=myServerAddress;Database=myDataBase; Trusted_Connection=yes;Encrypt=yes; 使用附加本地数据库文件的方式连接到本地SQL Server Express实例 Driver={SQL Native Client};Server=./SQLExpress; AttachDbFilename=c:/asd/qwe/mydbfile.mdf; Database=dbname;Trusted_Connection=Yes; 为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。 使用附加本地数据文件夹中的数据库文件的方式连接到本地SQL Server Express实例 Driver={SQL Native Client};Server=./SQLExpress; AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname; Trusted_Connection=Yes; 为何要使用Database参数?如果同名的数据库已经被附加,那么SQL Server将不会重新附加。 数据库镜像 Data Source=myServerAddress; Failover Partner=myMirrorServer;Initial Catalog=myDataBase;Integrated Security=True; SQL Native Client OLE DB Provider 标准连接 Provider=SQLNCLI;Server=myServerAddress; Database=myDataBase;Uid=myUsername;Pwd=myPassword; 受信的连接 Provider=SQLNCLI;Server=myServerAddress; Database=myDataBase;Trusted_Connection=yes; 连接到SQL Server实例 指定服务器实例的表达式和其他SQL Server的连接字符串相同。 Provider=SQLNCLI;Server=myServerName/theInstanceName; Database=myDataBase;Trusted_Connection=yes; 使用帐号和密码 oConn.Properties("Prompt") = adPromptAlways oConn.Open "Provider=SQLNCLI;Server=myServerAd
阳光岛主
2019/02/19
1.8K0
C++通过ADO访问数据库的连接字符串
新建一个***.txt重名为***.udl,双击运行udl文件弹出数据源配置对话框,配置好并测试连接成功以后点确定,会在udl文件里产生一个连接字符串。
用户7886150
2021/02/06
2.6K0
推荐阅读
相关推荐
Ubuntu安装SqlServer
更多 >
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入[数据] 腾讯云技术交流站
获取数据实战干货 共享技术经验心得
加入数据技术工作实战群
获取实战干货 交流技术经验
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验