如何在 Node.js 中生成 vCard (VCF) 联系人文件?
假设您想要一种简单且支持良好的联系人导出方式。这可能是因为您正在创建 CRM 应用程序、构建电子邮件客户端或其他任何需要支持和导出联系人项目的东西。有一个简单的解决方案:VCF 文件。可以创建、编辑联系人并将其导出为 vCard(或“VCF”)文件,以便在其他设备上使用。 VCF 文件可用于跨不同系统传输联系人,并提供一致的文件格式来表示联系人和大量潜在属性。
在本文中,我们将解释如何在 Node.js 中生成您自己的 VCF 联系人文件。
项目设置和模块安装:
第 1 步:创建一个 Node.js 应用程序并将其命名为“项目”,使用以下命令:
mkdir Project && cd Project
npm init -y
第 2 步:使用以下命令安装依赖模块:
npm i vcards-js axios
第 3 步:使用以下命令创建 vcard.js 文件:
touch vcard.js
项目结构:这是该项目的初始目录:
第 4 步:要创建单个 vCard,设置一些基本属性,并将其保存到文件vcard.js 中:
vcard.js
let vCardsJS = require('vcards-js');
// This is your vCard instance, that
// represents a single contact file
let vCard = vCardsJS();
// Set contact properties
vCard.firstName = "James";
vCard.middleName = "Daniel";
vCard.lastName = "Smith";
vCard.organization = "GeeksforGeeks";
vCard.title = "Technical Writer";
vCard.email = "james@example.com";
vCard.cellPhone = "+1 (123) 456-789";
// Save contact to VCF file
vCard.saveToFile(`james.vcf`);
vcard.js
let vCardsJS = require('vcards-js');
let axios = require('axios');
(async () => {
// This is your vCard instance, which
// represents a single contact file
let vCard = vCardsJS();
// Set contact properties
vCard.firstName = "James";
vCard.lastName = "Smith";
// Add a profile photo by fetching from a URL
let image = await axios.get("https://via.placeholder.com/300",
{responseType: 'arraybuffer'});
// Convert image to base 64
let imageBase64 = Buffer.from(image.data).toString('base64');
// Set vCard photo to the base 64 value of the image
vCard.photo.embedFromString(imageBase64, 'image/jpeg');
// Set birthday using a JavaScript date object
vCard.birthday = new Date("July 17, 2004");
// Save contact to VCF file
vCard.saveToFile(`james-with-photo-and-birthday.vcf`);
})();
第 5 步:要将自定义个人资料照片添加到您的 vCard,您需要将个人资料照片转换为 Base64,然后使用 Base64 数据格式进行设置。此示例从 URL 获取占位符图像,将获取的图像转换为 Base64,然后将个人资料照片设置为 vCard 中的该图像。 Base64 是一种非常强大的格式,因此很可能将本地图像或图像从文件上传转换为 Base64,然后从那里设置 vCard 个人资料照片。这是在浏览器上将上传的图像转换为 Base64 的方法。
要设置自定义生日,只需将birthday 属性设置为表示联系人生日的纯JavaScript Date 对象。
创建名为vcard.js的以下文件:
vcard.js
let vCardsJS = require('vcards-js');
let axios = require('axios');
(async () => {
// This is your vCard instance, which
// represents a single contact file
let vCard = vCardsJS();
// Set contact properties
vCard.firstName = "James";
vCard.lastName = "Smith";
// Add a profile photo by fetching from a URL
let image = await axios.get("https://via.placeholder.com/300",
{responseType: 'arraybuffer'});
// Convert image to base 64
let imageBase64 = Buffer.from(image.data).toString('base64');
// Set vCard photo to the base 64 value of the image
vCard.photo.embedFromString(imageBase64, 'image/jpeg');
// Set birthday using a JavaScript date object
vCard.birthday = new Date("July 17, 2004");
// Save contact to VCF file
vCard.saveToFile(`james-with-photo-and-birthday.vcf`);
})();
运行应用程序的步骤:要运行此程序,请运行以下命令:
node vcard.js
输出:我们程序的输出和结果是在项目目录下新建的vCard,内容如下:
BEGIN:VCARD
VERSION:3.0
FN;CHARSET=UTF-8:James Smith
N;CHARSET=UTF-8:Smith;James;;;
BDAY:20040717
PHOTO;ENCODING=b;TYPE=image/jpeg:iVBORw0KGgoAAAANSUhEUgAAASwAAAEsBAMAAACLU5NGAAAAG1BMVEXMzMyWlpacnJyqqqrFxcWxsbGjo6O3t7e+vr6He3KoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAD90lEQVR4nO3cwW+bSBQH4AcGw5HnJDhHaN3dHO1su9ojNGnPtrUb7dFuIiVHnEo5263Uv3vfGwab1myVA5DV6vcpgeD35HmeGYbJxUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zOb3N5BRexlu9/Jo+NCQFl/HbWrRK7s6Amcdy3jCfaftyOT/OmsnLxSFqkzu04Ns1Z+RxPOMtUc63fH6U5HP8O5/uo1Vyh9IJhTylwSjz0pV0y4Tex0dJ7iij3ck+WiV3J9RPvVhRLgO5O5V+KOSl7MesnXSRH++jNrlDAWurEW0i6ZOz8jI9mlwaDXkftckd8nXEdgnNVjI2sf6Q+VvLSMiMHJnupHC0j9rkrmlL87Lhs7JK86oM1fowVFq0jdrkjn2QKbMuTEvD8aGsfCQ9th9PbzHeR21yt1KWkUq3et+Tq4tDHpnXfZ67+7Zdltu1itrkbrEuRWVLWdmwHbl0shlXSQ7LLVtFbXLXZUmLphHOHK3IsWVtTg6Lk6PFV1Gb3G1Z9I1Xjb015NpSHq7jfntL7reoaW7JhD+pJQ2537llVuyGO1Em17iWJMt7f3ei/zeZcdGlKLDr1saW5XPV9F9bM2pV1CZ3yDxDZFx0HZcF0z+s8rpwVcuWPo5k1KqoTe7QwD58mp6Js/PUTn4tVEatx2ei3lAzu4M4t3uErQl5PN3YOb84NR+gitrkDnl8J51QNO23hjLH7SqQxxnp0trbfotmo9t0RE27U9k9hFw2PuBfLnVD0d/u9KMs8hNq2svrxFqXJXprZtmg9riXp5v0jTRI4afyn5lv1X8+gRaQ22XA/zT6sxatkgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD65tjf/5gXLYtHb/8l8kNZkVw5zEwjIjei8ru7rtJ7/YqcO3ISorTFsiLvt+eXZY7xlp5sWd6b7KscrpeZ80DBus2y6D1dviY3C+QP/9WUnGWkp8GrhZa1fE3DQiK1ssYrurdlDeblwZ86TzTctFuWf/dxPihy+kw31+/IuTOnm2v98I6EwoTe1cuKLsLEluVm5cFLHHf7pc2JKIPoZl4STpfFHzSRfnEyc5pQrmVJiO7l13yRHpdlPQ0LW5ZTHSInWN23WZZMedMJycUq0aa1FT1F1dyK6MugoHpvuY903Fv0a9Jqb+n7apesHlY0KSvRU6233CV9V5Z/RsdzixbzlsvSuUXL4nFOT9mVtq2nw9yiYPx9WebCHGt3IrW7yOnby51IuyzPKEgv9M31dLgTKUgayioH+oqrdavlsp5hWPTb3jM9vnQBjZyLl64AAP43/gHVSaMe2vmdiAAAAABJRU5ErkJggg==
REV:2022-02-27T19:04:38.635Z
END:VCARD
此 vCard 存储为文件 james-with-photo-and-birthday.vcf,如代码中所指定。
结论: vCard 和 VCF 文件可以集成到您可能构建的任何基于联系人的应用程序中。使用 vcards-js,在 Node.js 中生成和保存 vCard/VCF 文件非常简单。