【问题标题】:Issue saving PDF with MIMEKIT使用 MIMEKIT 保存 PDF 问题
【发布时间】:2016-06-01 16:58:15
【问题描述】:

我有一个包含多部分正文的 MIME 文件(不是电子邮件)。其中一个是 xml,另一个是 Application\PDF。尝试保存 PDF 时,它不会打开。我可能只是没有正确执行(保存文件时,但 Adob​​e 说在尝试打开文件时文件已损坏)。

我正在使用以下代码:(注意:在此 sn-p 中,我只是从文件中检索信息,然后将其保存到数据库中。我稍后从数据库中提取数据并创建文件。我知道问题不是与数据库之间的保存问题,因为它已经过彻底测试。正是这种方法导致了我的问题。)

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();
            }
        }
    }
}

这样做有什么我缺少的吗?

【问题讨论】:

    标签: c# .net pdf mimekit


    【解决方案1】:

    您正在保存编码的内容。您需要保存解码的内容。像这样:

    p.ContentObject.DecodeTo(stream);
    

    【讨论】:

      【解决方案2】:

      事实证明,问题在于我拥有的文件是使用 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();
                      }
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2019-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        相关资源
        最近更新 更多