Получение пустых вложений в формате pdf при попытке создать файл Activitymimeattachment - PullRequest
0 голосов
/ 03 мая 2019

Я хочу прикрепить pdf из URL в CRM "ActivityMimeattachment". Все работает нормально, но я получаю пустые вложения PDF (даже размер такой же, как оригинальный PDF). Может ли быть какая-то проблема с кодированием или преобразованием? Может, кто-нибудь может мне помочь с этим?

Я вижу, что электронная почта создается с вложением, которое пустое, но размер такой же, как и в оригинальном PDF.

Entity attachment = new Entity("activitymimeattachment");
attachment["subject"] = "Attachment";
string fileName = "Invoice.pdf";
attachment["filename"] = fileName;
WebClient wc = new WebClient();
string theTextFile = wc.DownloadString(url);
byte[] fileStream = Encoding.ASCII.GetBytes(theTextFile);
attachment["body"] = Convert.ToBase64String(fileStream);
attachment["mimetype"] = "application/pdf";
attachment["attachmentnumber"] = 1;
attachment["objectid"] = new EntityReference("email", emailguid);
attachment["objecttypecode"] = "email";
service.Create(attachment);

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Спасибо за совет @Aron.Я на самом деле нашел решение, которое очень просто.Я просто использовал другой метод из класса WebClient.Главное, что мне нужно было изменить метод DownloadString (url) на метод DownloadData (url):

WebClient wc = new WebClient();
byte[] theTextFile = wc.DownloadData(url);
attachment["body"] = Convert.ToBase64String(theTextFile);enter code here
0 голосов
/ 03 мая 2019

Я считаю, что кодировка является проблемой.Файл PDF не является ни строкой, ни файлом ASCII, поэтому эти строки ошибочны:

string theTextFile = wc.DownloadString(url);
byte[] fileStream = Encoding.ASCII.GetBytes(theTextFile);

Я бы предложил изменить ваш веб-клиент, чтобы загрузить двоичный файл, например application/pdf, и сохранить его локально, например, в d:\temp\invoice.pdf.

Затем вы можете сделать это:

var bytes = File.ReadAllBytes(@"d:\temp\invoice.pdf");
var body = Convert.ToBase64String(bytes);

Короче, не пытайтесь поместить PDF-файл в строку или используйте кодировку ASCII для получения его байтового массива.Это двоичный файл, пока вы не конвертируете его в Base64.

Конечно, вы также можете получить ваш веб-клиент, чтобы загрузить файл в память и преобразовать его в Base64, не записывая файл локально.Я просто хотел, чтобы в простейшем примере был смысл кодировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...