使用适用于 windows 和 ios 的照片创建 vCard - C#
Creating vCard with photo that works on windows and ios - C#
我目前正在为客户编写程序,他们可以使用 .NET MVC 将信息导出为 VCard。
当我在 Windows 上下载 vCard 时,我已经正确地完成了所有操作,但是当我从 IOS 设备上下载 vCard 时,我的代码似乎没有附加图像。
这是我写的第一张 vCard,所以不是我太熟悉的东西。我使用 V2.1 作为唯一可以让图像显示在 windows 机器上的版本。我愿意接受这里的任何建议,以及关于为什么图像无法在 IOS.
上显示的任何信息
// Building the V-Card
var vCard = new StringBuilder();
vCard.Append("BEGIN:VCARD");
vCard.AppendLine();
vCard.Append("VERSION:2.1");
vCard.AppendLine();
// Name
vCard.Append($"N: {model.sLastname};{model.sFirstname};");
vCard.AppendLine();
vCard.Append($"FN:{model.sFirstname} {model.sLastname}");
vCard.AppendLine();
// Company
vCard.Append("ORG:");
vCard.Append(model.sCompanyName);
vCard.AppendLine();
// Job Title
vCard.Append("TITLE:");
vCard.Append(model.sJobTitle);
vCard.AppendLine();
// Image
FileModel file = FileModel.getByGuid(model.sProfilePicGuid);
vCard.Append($"PHOTO;ENCODING=BASE64;TYPE={file.sFileType}:");
vCard.Append(Convert.ToBase64String(file.FileData));
vCard.AppendLine(string.Empty);
vCard.AppendLine();
// Tel
vCard.Append("TEL");
vCard.Append(";");
vCard.Append("WORK");
vCard.Append(";");
vCard.Append("VOICE:");
vCard.Append(model.sCompanyPhone);
vCard.AppendLine();
// Cell
vCard.Append("TEL");
vCard.Append(";");
vCard.Append("CELL");
vCard.Append(";");
vCard.Append("VOICE:");
vCard.Append(model.sPhoneNumber);
vCard.AppendLine();
// Email
vCard.Append("EMAIL");
vCard.Append(";");
vCard.Append("PREF");
vCard.Append(";");
vCard.Append("INTERNET:");
vCard.Append(model.sEmail);
vCard.AppendLine();
// Web site
vCard.Append("URL");
vCard.Append(";");
vCard.Append("WORK:");
vCard.Append(model.sWebsiteUrl);
vCard.AppendLine();
// Address
string address = model.sAddress.Replace("\n"," ");
vCard.Append($"ADR; WORK; PREF:; ; {address}; ; ; ; ");
vCard.AppendLine();
// End
vCard.Append("END:VCARD");
string result = vCard.ToString();
生成的内容如下:
BEGIN:VCARD
VERSION:2.1
N: du Preez;Armand;
FN:Armand du Preez
ORG:TestCompany
TITLE:Manager
PHOTO;ENCODING=BASE64;TYPE=image/jpeg:my Base64 string
TEL;WORK;VOICE:0745589983
TEL;CELL;VOICE:0745589983
EMAIL;PREF;INTERNET:armand3@test.com
URL;WORK:https://someurl.co.za
ADR; WORK; PREF:; ; 1 Westroad, Eastville; ; ; ;
END:VCARD
使用 vCard.AppendLine()
而不是 vCard.Append("\n")
因为 IOS 设备使用 \r
而不是 \n
作为行分隔符。
vCard.AppendLine()
产生 \r\n
。这样它就可以在 Windows 和 IOS (linux)
中工作
我目前正在为客户编写程序,他们可以使用 .NET MVC 将信息导出为 VCard。
当我在 Windows 上下载 vCard 时,我已经正确地完成了所有操作,但是当我从 IOS 设备上下载 vCard 时,我的代码似乎没有附加图像。
这是我写的第一张 vCard,所以不是我太熟悉的东西。我使用 V2.1 作为唯一可以让图像显示在 windows 机器上的版本。我愿意接受这里的任何建议,以及关于为什么图像无法在 IOS.
上显示的任何信息 // Building the V-Card
var vCard = new StringBuilder();
vCard.Append("BEGIN:VCARD");
vCard.AppendLine();
vCard.Append("VERSION:2.1");
vCard.AppendLine();
// Name
vCard.Append($"N: {model.sLastname};{model.sFirstname};");
vCard.AppendLine();
vCard.Append($"FN:{model.sFirstname} {model.sLastname}");
vCard.AppendLine();
// Company
vCard.Append("ORG:");
vCard.Append(model.sCompanyName);
vCard.AppendLine();
// Job Title
vCard.Append("TITLE:");
vCard.Append(model.sJobTitle);
vCard.AppendLine();
// Image
FileModel file = FileModel.getByGuid(model.sProfilePicGuid);
vCard.Append($"PHOTO;ENCODING=BASE64;TYPE={file.sFileType}:");
vCard.Append(Convert.ToBase64String(file.FileData));
vCard.AppendLine(string.Empty);
vCard.AppendLine();
// Tel
vCard.Append("TEL");
vCard.Append(";");
vCard.Append("WORK");
vCard.Append(";");
vCard.Append("VOICE:");
vCard.Append(model.sCompanyPhone);
vCard.AppendLine();
// Cell
vCard.Append("TEL");
vCard.Append(";");
vCard.Append("CELL");
vCard.Append(";");
vCard.Append("VOICE:");
vCard.Append(model.sPhoneNumber);
vCard.AppendLine();
// Email
vCard.Append("EMAIL");
vCard.Append(";");
vCard.Append("PREF");
vCard.Append(";");
vCard.Append("INTERNET:");
vCard.Append(model.sEmail);
vCard.AppendLine();
// Web site
vCard.Append("URL");
vCard.Append(";");
vCard.Append("WORK:");
vCard.Append(model.sWebsiteUrl);
vCard.AppendLine();
// Address
string address = model.sAddress.Replace("\n"," ");
vCard.Append($"ADR; WORK; PREF:; ; {address}; ; ; ; ");
vCard.AppendLine();
// End
vCard.Append("END:VCARD");
string result = vCard.ToString();
生成的内容如下:
BEGIN:VCARD
VERSION:2.1
N: du Preez;Armand;
FN:Armand du Preez
ORG:TestCompany
TITLE:Manager
PHOTO;ENCODING=BASE64;TYPE=image/jpeg:my Base64 string
TEL;WORK;VOICE:0745589983
TEL;CELL;VOICE:0745589983
EMAIL;PREF;INTERNET:armand3@test.com
URL;WORK:https://someurl.co.za
ADR; WORK; PREF:; ; 1 Westroad, Eastville; ; ; ;
END:VCARD
使用 vCard.AppendLine()
而不是 vCard.Append("\n")
因为 IOS 设备使用 \r
而不是 \n
作为行分隔符。
vCard.AppendLine()
产生 \r\n
。这样它就可以在 Windows 和 IOS (linux)