2016-06-01 6 views
0

У меня есть файл MIME (а не e-mail), у которого есть множественное тело. Одна из частей - xml, а другая - приложение \ PDF. При попытке сохранить PDF он не открывается. Я, вероятно, просто не делаю этого правильно (как файл сохраняет, но Adobe говорит, что файл поврежден при попытке открыть его).Ошибка сохранения PDF-файла с помощью MIMEKIT

Я использую следующий код: (ПРИМЕЧАНИЕ. В этом фрагменте я просто извлекаю информацию из файла, а затем сохраняю ее в базе данных. Я потом извлекаю данные из базы данных и создаю файл. это не сохранение в/из БД, которая является проблемой, как была тщательно протестирована. Именно в этом методе, который вызывает мою проблему.)

foreach (var part in _mimeMessage.BodyParts) 
{ 
    if (part is MimePart) 
    { 
     var p = part as MimePart; 

     if (p.ContentId == name) 
     { 
      using (var stream = new System.IO.MemoryStream()) 
      { 
       p.ContentObject.WriteTo(stream); 

       return stream.ToArray(); 
      } 
     } 
    } 
} 

есть ли что-то мне не хватает в этом?

ответ

0

Вы сохраняете закодированный контент. Вам необходимо сохранить декодированный контент. Например:

p.ContentObject.DecodeTo(stream); 
0

Оказалось, что файлы, которые у меня были, были «закодированы в двойном порядке» с использованием base64. Мне помогли кто-то на форумах MimeKit, и вот код, который закончился для меня.

  foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>()) 
     { 
      if (attachment.ContentId != name) 
       continue; 

      using (var stream = new System.IO.MemoryStream())//File.Create(@"C:\Client Test Data\Alert Files\" + name)) 
      { 
       using (var filtered = new FilteredStream(stream)) 
       { 
        filtered.Add(DecoderFilter.Create("base64")); 
        attachment.ContentObject.DecodeTo(filtered); 

        return stream.ToArray(); 
       } 
      } 
     } 
Смежные вопросы