Загрузите файл из 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, или что-то явно не так с кодом выше?

0 ответов

Другие вопросы по тегам