js基础--将内存中的数据保存为文件下载到本地

本文转自:https://blog.csdn.net/wxl1555/article/details/86501049

前言

最近在做一个项目,有个需求就是,前端在内存中维护了一个很复杂的json对象,当点击下载按钮时,需要把这个json对象保存到文本中并下载到本地。

总结了两种实现方式

假如在我们项目中有个json对象如下:

    var jsonObj = {
        name: 'Leon WuV',
        age: 23
    }

方式一

当我们点击下载按钮时,调用如下方法

function downFlie() {
      // 创建a标签
      var elementA = document.createElement('a');
      
      //文件的名称为时间戳加文件名后缀
      elementA.download = +new Date() + ".tpl";
      elementA.style.display = 'none';
      
      //生成一个blob二进制数据,内容为json数据
      var blob = new Blob([JSON.stringify(jsonObj)]);
      
      //生成一个指向blob的URL地址,并赋值给a标签的href属性
      elementA.href = URL.createObjectURL(blob);
      document.body.appendChild(elementA);
      elementA.click();
      document.body.removeChild(elementA);
}

可以看到文件已经下载到本地了, 也没有问题,是刚才我们维护在内存中的哪个json对象。

方式二

function downFile() {
  var elementA = document.createElement('a');
  
  elementA.setAttribute('href', 'data:text/plain;charset=utf-8,' + JSON.stringify(json1));
  elementA.setAttribute('download', +new Date() + ".tpl");
  elementA.style.display = 'none';
  document.body.appendChild(elementA);
  elementA.click();
  document.body.removeChild(elementA);
}

额,第二种方式可能在大文件的时候,不能导出所有数据。所以不推荐

方式三

FileReader
同样地,FileReader 对象也可以使得我们对 Blob 对象生成一个下载地址 URL,它和 URL.createObject 一样可以接收 File 或 Blob 对象。

这个过程,主要由两个函数完成 readAsDataURL 和 onload,前者用于将 Blob 或 File 对象转为对应的 URL,后者用于接收前者完成后的 URL,它会在 e.target.result 上。

完整的使用 Blob 和 FileReader 下载文件的 util 函数:

const readBlob2Url  =  (blob, type) =>{
  return new Promise(resolve => {
    const reader = new FileReader()
    reader.onload = function (e) {
      resolve(e.target.result)
    }
    reader.readAsDataURL(blob)
  })
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这只是一个升级包,下载时请注意!   2.2.0 ------------------------------------------------- [增强]uwa:tag_list标签列表支持 [更改]前台默认模板取消css和js合并 [增强]添加网站移动版 [增强]会员自定义注册时填写的附加字段 [更改]更改积分兑换方式 [修复]修复会员列表通知发送不能选择会员编号 [修复]修复会员上传列表分页错误 [修复]完善字符截断函数长度判断 [更改]获取联动作为不限制权限 [更改]更改编辑器加载方式,防止不兼容的浏览器UserAgent下不会加载其他脚本 [更改]更新编辑器 [增强]允许自定义模型字段表单模板 [更改]取消后台编辑个人资料 [更改]更改档案支持及反对操作方式 [更改]更改$PAGE_LIST为$PAGING, 自定义模板 [更改]POSITON改为$_CP数组, 自定义模板 [修复]修复任务js和会员信息js 的 Content-Type:application/x-javascript; [增强]自定义跳转及404页面模板 [完善]完善强制静态判断 [更改]会员心模板结构更改,sidebar作为公共模板 [更改]当前操作定义为 $_GCAP [修复]修复 localhost cookie丢失 [修复]修复首页地址合成判断 [增强] pfa 用户代理侦测 [增强]广告标签允许自定义模板 [增强]档案列表标签允许随机调取 [增强]自定义下拉框、选项卡和多选框显示方式和多选分隔符 [更改]删除广告位时删除对应广告, 删除链接分类时删除对应链接 [更改]默认模板登录页添加广告 [增强]内链允许随机读取,自定义内链条数 [更改]重置菜单标签默认索引 [增强]语言标签增强,允许变量 [优化]更改频道列表获取方式,优化ac_list标签的row 参数 [增强]增加会员等级上传选项设置,增加默认上传空间大小选项,优化上传选项提示 [增强]添加频道缩略图 [修复]更新菜单展位时同时更新菜单对应展位别名,删除菜单展位时删除对应菜单 [增强]允许立即运行系统任务 [修复]安全加强, 防止Cookie伪造 [修复]修复登录有效期不起作用 [优化]频道列表采用多级载入 [修复]修复联动菜单子条目取消选择时取值为空 [修复]修复后台标签显示 [增强]菜单增加提示选项,可用作英双语显示等功能 [修复]修复后台跳转到底部按钮 [优化]选项未保存提示 [修复]修复链接logo拼写错误 [修复]修复自定义错误显示 [更改]F()函数优化减少内存消耗 [更改]优化群组、控制器和动作获取 [优化]优化频道列表读取 [修复]修复一键更新潜在内存溢出 [优化]全部频道缓存数据精简 [更改]搜索不显示隐藏频道 [修复]修复档案、会员及自定义模型附加表数据获取,防止基本信息丢失 [增强]新增投票功能 [修复]修复档案评论发表错误, 完善档案评论列表读取 [修复]完善广告位js生成, 修复广告位列表获取错误 [更改]默认 Cookie 加密码改为16位, 优化加密码重新生成 [增强]新增电子邮件方式审核新用户 [更改]固化内置扩展(广告,链接,留言,单页) [更改]拆分系统选项设置 [优化]修改默认字段 ID 防止与时间字段重复造成日历插件不能调出 [修复]完善默认样式 [修复]修复附加表字段 get_fieldValue 过滤 [更改]完善语言, 便于单词性语言显示 [修复]完善切换档案模型状态 [更改]统一数据表检查方式 [增强]添加自定义模型 [修复]修复视频模型封面幻灯片显示 [优化]完善幻灯片广告链接地址处理及提示 [修复]注册检查邮件时,需要会员状态筛选 [增强]内置电子邮件功能 [更改]管理员角色按权重排序 [修复]修复单页编辑生成显示 [修复]增加 js 兼容性   UWA 2.X 升级说明 注意事项 ---------------------------------------------------- 1、在使用升级程序之前,确保您已经对系统进行了备份。 2、确保程序的完整性,并建议在操作之前先本地进行测试升级,在没有 任何问题后再进行上传。 3、在您修改了程序或数据库结构以后我们不能保证升级能够完全成功。   升级方法 ---------------------------------------------------- 1. 将升级包 upload 下所有的文件上传至网站根目录覆盖。 2. 访问 upgrade 目录(例如 http://test.com/upgrade/ ),执行升级。 3. 登陆管理后台,清除缓存,保存一次系统选项,然后再清除缓存。 4. 升级完成后,删除 upgrade 目录。     相关阅读 同类推荐:站长常用源码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值