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

711 阅读2分钟

有个需求是在前端由用户输入姓名+电话,然后生成一个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代码实现逻内容阅读:blog.csdn.net/s1879046/ar…

 

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

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

插件安装方法来自:www.cnblogs.com/xinchenhui/…

安装:

npm install file-saver --save

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

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

引用:

import FileSaver from 'file-saver'

下载:

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

 

使用方法无非这几步:

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

2.导出文件名.后缀

 

使用方法参考:www.cnblogs.com/kunmomo/p/1…

 

例子:

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的使用区别请看:www.cnblogs.com/candy-xia/p…

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 插件(下载地址:github.com/jimmywartin…),但是要去配置https 配合service worker,暂不采用这种做法。