给起始页项目增加了导入导出功能

2022-03-26 · 周六开心多云

下午回到家之后继续对「奇趣起始页」项目做了一些更新,主要是个人设置项的“导入导出”功能。这个功能我也大致知道怎么做,就是生成一个 Blob 对象和链接,然后触发浏览器下载就是了,可此前一直没有研究过相关的 API,一直拖一直拖,今天就趁机边学边做吧!

首先做的是导出,原理确实如上所述,把 JSON 变成字符串之后转为 Blob 对象再下载就行,关键核心代码就这么多。在 MDN 上搜索关键词“download”的时候还发现有个 downloadsAPI,不过属于浏览器扩展,网页本身无法使用,且 Safari 目前并不支持。

// 转字符串
const blob = new Blob([ JSON.stringify(data.user_set, null, 2) ], { type: "application/json" });

// 生成链接并触发下载
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = `userset-${parseInt(new Date().getTime() / 1000)}.json`;
link.click();

导入功能,其实就是利用 Input 里面的 Files 对象实现,因为 File 对象本身就是特殊类型的 Blob,所以我们能用 Blob 的 text 方法获取原文(返回 Promise),之后无脑丢给 JSON.parse 处理就行,为了处理异常(JSON 格式错误),可以使用 try ... catch

file.text().then(text => {
  try{
    const json = JSON.parse(text);

    // 覆盖当前运行的个人设置,并存储 LocalStorage
  }
  catch(e){
    // JSON 文件格式错误,请检查
  }
});

总体来说,这两个功能整起来都不难,也许难的还是遇到难题之后想解决掉的那种欲望吧!

Paul

Paul

特立独行的一只前端菜狗。这篇日记编写大概耗时了 0 分钟,内容均为个人原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!如本站内容对你有所帮助的话,不妨 捐助支持 一下?

近期评论

鲍小螺: 前辈多多指教!ahu: 后生可畏寻梦xunm: 真不错,板子很好看。timochan: 太惨了( ,更新暴毙,如果恢复没成功,数据也 dump 不出来鲍小螺: 在这部分对话中,广树和保罗继续讨论生活的不同方面。保罗提到了技术更新和国内的优秀 IT 技术。广树解释了在国内积累的经验如何在日本产生穿越的感觉,并表达了对于日本生活节奏的喜爱。他还提到了医疗水平的差异和对于生活方式的感受。保罗表示,通过动漫和现实的对比,艺术来源于现实,日本生活的确有着独特之处。他们讨论了国内的生活节奏和就医等方面的压力,以及个人选择的自由。最后,他们也谈到了不结婚不买房的选择和对于房价的困扰。鲍小螺: 该对话进一步讨论了房地产和税收的问题。保罗提到了国内的房地产税和增值税以及日本的固定资产税。广树解释了日本房地产税的收取方式,以及房产税对于国内房产的影响。他认为,与国内相比,日本的房子质量和服务更好。保罗提出疑问,为什么自己拥有的地也要交税。广树解释了类似增值税的原理,并指出在日本拥有房产是稳定安全的。最后,保罗表示从广树的角度来看,情况确实是如此。鲍小螺: 这篇文章的聊天记录也尝试过用 GPT 总结,结果并不是太好,不知道是不是 Prompt 的问题,实际出来的内容过于简练了,于是又耗费了半小时写完,呼~
奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君