Загрузите файл из Dropbox с помощью C# WebClient - проблема с кодировкой
Я пытаюсь загрузить файл из Dropbox, затем создать вложение и отправить его по электронной почте в форме WFFM в обновлении Sitecore 8.2. 5. На своем веб-сайте я использую два типа элементов управления загрузкой файлов: обычная загрузка файла asp.net MVC и загрузка из Dropbox. Для этого я создал пользовательский элемент управления WFFM и пользовательское действие сохранения. Оба элемента управления используют один и тот же код для отправки электронной почты, и обычные файлы для загрузки файлов проходят отлично, к сожалению, когда я пытаюсь загрузить файл из Dropbox и открыть вложение в электронном письме, я получаю сообщение об ошибке:
"Adobe Acrobat Reader не удалось открыть"filename.pdf", потому что он либо не поддерживается типом файла, либо потому, что файл был поврежден (например, он был отправлен как вложение электронной почты и неправильно декодирован)".
В коде я вижу, что размер файла bytes[], который я получаю при обычной загрузке, отличается от Dropbox. Я думаю, что-то не так с кодированием / декодированием, но у меня заканчиваются идеи.
Код для загрузки Dropbox:
using (var client = new WebClient())
{
client.Encoding = Encoding.UTF8;
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(this.DownloadProgressChanged);
file = client.DownloadData(this.FileLocation);
fileName = Path.GetFileName(this.FileLocation).Replace(Constants.FileUpload.DropboxQueryString, string.Empty);
var fileExtension = Path.GetExtension(this.FileLocation).Replace(Constants.FileUpload.DropboxQueryString, string.Empty);
mimeType = MimeTypeMap.GetMimeType(fileExtension);
}
Затем я использую Convert.ToBase64String(file), чтобы передать это значение в виде строки (не говоря уже о том, почему мне это нужно, но это нужно сделать таким образом) в форме для пользовательского действия сохранения Отправить сообщение электронной почты, и я декодирую его обратно, прикрепляя файл:
private static IList<Attachment> RetrieveAttachments(string fileName, string mimeType, string file)
{
IList<Attachment> attachments = new List<Attachment>();
if (!string.IsNullOrWhiteSpace(fileFieldValue))
{
byte[] fileContent = Convert.FromBase64String(file);
var actualAttachment = new MemoryStream(fileContent)
{
Position = 0
};
var attachment = new Attachment(actualAttachment, fileName, mimeType);
attachment.ContentDisposition.Size = actualAttachment.Length;
attachment.ContentDisposition.FileName = fileName;
attachments.Add(attachment);
}
return attachments;
}
Знаете ли вы, как я должен кодировать / декодировать файлы, загруженные из Dropbox, или что-то явно не так с кодом выше?