2017-04-25 2 views
2

Je suis en train d'écrire un programme pour un client où il peut exporter des informations en tant que VCard en utilisant .NET MVC.Création d'une vCard avec une photo qui fonctionne sur Windows et ios - C#

J'ai tout ce qui fonctionne correctement lorsque je télécharge la vCard sur Windows, mais le code que j'ai ne semble pas attacher l'image lorsque je télécharge la vCard sur un périphérique IOS.

Ceci est la première vCard que j'ai jamais écrite donc pas quelque chose que je connais trop bien. J'utilise V2.1 comme sa seule version que je pourrais obtenir l'image à afficher sur une machine Windows. Je suis ouvert à toutes les suggestions ici et aussi toute information sur la raison pour laquelle l'image ne tire pas sur 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(); 

Ce qui suit est ce qui a été généré:

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:[email protected] 
URL;WORK:https://someurl.co.za 
ADR; WORK; PREF:; ; 1 Westroad, Eastville; ; ; ; 
END:VCARD 
+0

Les périphériques IOS sont des périphériques semblables à unix. Donc je regarderais le retour "\ n" et essayerais juste un "\ r". – jdweng

+0

Merci pour la réponse rapide, j'ai essayé le ci-dessus, en changeant le caractère de retour cela brise complètement sur les machines Windows et ios. J'ai modifié ma question pour inclure la chaîne vCard générée. – ArmandDuPreez

+0

Il travaille actuellement sur Windows et IOS - La seule chose est que l'image ne fonctionne pas sur IOS où il est sur Windows. – ArmandDuPreez

Répondre

2

Utilisez vCard.AppendLine() au lieu de vCard.Append ("\ n") parce que les appareils IOS utilise "\ r" au lieu de " \ n ".

vCard.AppendLine() produit "\ r \ n". De cette façon, il fonctionnera sous Windows et IOS (linux)

+0

Merci - J'ai tout changé en AppendLine(), tous les enregistrements se déroulent à l'exception de l'image sur IOS. – ArmandDuPreez

+1

Dans le cas de l'image, ne faites pas vCard.AppendLine ($ "PHOTO; ENCODING = BASE64; TYPE = {file.sFileType}:"); car cela va casser la ligne avant le contenu de l'image. Dans ce cas, utilisez vCard.Append ($ "PHOTO; ENCODING = BASE64; TYPE = {file.sFileType}:"); –

+0

Salut Alejandro, en changeant l'AppendLine à Append semble avoir corrigé le problème que j'avais en train d'afficher les Photos. Merci beaucoup, vous êtes un champion. – ArmandDuPreez