前端JS/VUE如何生成Vcard或其他文件--导出任意后缀的文件

有个需求是在前端由用户输入姓名+电话,然后生成一个Vcard,也就是.vcf格式文件,就是导入手机的通讯录中,这个做手机测试的都知道。其实不一定是.vcf格式的文件,其他的格式文件也可以,如.txt等。

 

首先Vcard格式是什么样的,这个hello.vcf内容:

BEGIN:VCARD
VERSION:3.0
N:张三
FN:张三
TEL;TYPE=CELL:13838380438
END:VCARD

我们把这个内容写入文件就行,看起来很简单。但是要知道,除了IE(它特殊)能支持写文件,其他浏览器都不支持写文件。大家可以百度去看看为什么

但是我们知道excel由插件可以进行读写,就是其他文件就不行。多亏了泡泡鱼这个大神(人很厉害,也热情)给了一个思路,因为我们这个项目不涉及写入数据库,只是一次性的,生成vcard或其他文件即可,所以使用导出的思路,导出时可以更改文件名,特别时度娘有生成xxx.txt的例子。顺着这个思路我找到了FileSaver.js插件,借用这个插件我们就可以生成文件了,只需改下后缀即可!

后面我们只需考虑几个问题,

1.往文件写入内容,换行,空格,符号等内容---这个简单吧,就是js的换行符啊! \n

2.写完后保存文件名,指定路径等是否需要,还是默认即可;--因为我们的思想时导出文件,相当于下载功能,所以下载的路径时浏览器设置的路径。

其他的就是复制粘贴咯!

FileSaver代码实现逻内容阅读:FileSaver源码阅读_玉案轩窗的博客-CSDN博客_filesaver

简单介绍下FileSaver.js基本用法:

单独下载安装FileSaver.js教学:https://github.com/eligrey/FileSaver.js

插件安装方法来自:FileSaver.js 文件下载 - _Iniesta - 博客园

安装:

npm install file-saver --save

或者(需下载FileSaver.js文件)

<script src="path/FileSaver.js"/>

引用:

import FileSaver from 'file-saver'

下载:

FileSaver.saveAs('要下载的文件流','文件名');

使用方法无非这几步:

1.写内容(字符串、文本、图片、表格),默认是UTF-8

2.导出文件名.后缀

使用方法参考:h5实现下载(二)FileSaver.js 一个生成文件并下载的插件 - 坤嬷嬷 - 博客园

例子:

VUE的写法:

1.先引用(引用方法大同小异):

//我是直接下载js文件的,没有用npm,习惯问题
import FileSaver from '../../build/js/FileSaver'

  有些这么引用(他应该是npm install方式下载的): import { saveAs } from 'file-saver';

  也可以在代码中使用require():var FileSaver = require('file-saver');

2.然后直接写文本内容,几种写法都可以,具体file和Blob的使用区别请看:file-saver&Blob、File前端导出文件 - _花小七 - 博客园

var file = new File(["欢迎访问 享有盛誉之名博客"], "文件导出测试.txt", {type: "text/plain;charset=utf-8"});
saveAs(file);

或者

var file = new File(["欢迎访问 享有盛誉之名博客"], {type: "text/plain;charset=utf-8"});
saveAs(file, "文件导出测试.vcf");

或者

var blob = new Blob(["欢迎访问 享有盛誉之名博客"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "文件导出测试.txt");

JS的写法

1.先引用:

<script src="FileSaver.js" charset="utf-8"></script>

2.写法

//这个是在HTML文件里写的
<script type="text/javascript">
      var blob = new Blob(["欢迎访问 享有盛誉之名博客"], {type: "text/plain;charset=utf-8"});
      saveAs(blob, "文件导出测试.txt");
 </script>

全部看起来是不是更容易理解:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="FileSaver.min.js" charset="utf-8"></script>
    <script type="text/javascript">
      var blob = new Blob(["欢迎访问 享有盛誉之名博客"], {type: "text/plain;charset=utf-8"});
      saveAs(blob, "文件导出测试.txt");
    </script>
  </head>
  <body>
  </body>
</html>

如同上面VUE写法一样,在JS文件里就一模一样了。

最后执行的时候就跟下载文件似的,就在浏览器中下载下来了,如果需要下载到指定位置,看下面。

其他的图片和表格的内容,略!最后展示我生成Vcard格式的写法:

var file = new File([
                      "BEGIN:VCARD"+"\n"  +
                      "VERSION:3.0"+"\n" +
                      "N:"  + "张三"+"\n" + 
                      "FN:" + "张三"+"\n" + 
                      "TEL;TYPE=CELL:" + "13838380438"+"\n"+
                      "END:VCARD"
                     ], {type: "text/plain;charset=utf-8"});
                    
                    FileSaver.saveAs(file, "hello.vcf");

默认下载浏览器的路径:hello.vcf

另外:

除了FileSaver.js插件, 还有StreamSaver.js 插件(下载地址:https://github.com/jimmywarting/StreamSaver.js),但是要去配置https 配合service worker,暂不采用这种做法。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值