c# - 使用适用于 Windows 和 iOS 的照片创建 vCard - C#

标签 c# .net vcf-vcard

我目前正在为客户编写程序,他们可以使用 .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。这样它就可以在 WindowsIOS (linux) 中工作

关于c# - 使用适用于 Windows 和 iOS 的照片创建 vCard - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610538/

相关文章:

c# - 延迟的 NUnit 断言消息评估

php - 根据数字删除MySQL记录

c# - 在C#中,你如何称呼数组引入的那种多态性?

java - 使用 Ant 构建 jar 文件(htsjdk jar)

javascript - 如何在 WebForm 中从 Jquery Ajax 调用 C# 方法?

c# - 检查两个列表包含相同的属性值

c# - 在其他项目中使用命名空间

c# - 带有 FlagsAttributes 的枚举

根据 vcard 3.0 格式,用于 75 个字符行的 java base64 编码器

android - 如何将 vcard 作为短信/彩信发送?