使用MIMEKIT保存PDF的问题

时间:2016-06-01 16:58:16

标签: c# .net pdf mimekit

我有一个MIME文件(不是电子邮件),它有一个多部分正文。其中一个部分是xml,另一个是Application \ PDF。尝试保存PDF时,它将无法打开。我可能只是没有正确地执行它(因为文件保存,但Adobe说在尝试打开文件时文件已损坏)。

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

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

这样做有什么我缺的吗?

2 个答案:

答案 0 :(得分:0)

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

p.ContentObject.DecodeTo(stream);

答案 1 :(得分: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();
                }
            }
        }