0

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

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

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

这样做我有什么遗漏吗?

4

2 回答 2

0

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

p.ContentObject.DecodeTo(stream);
于 2016-06-01T17:35:50.317 回答
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();
                }
            }
        }
于 2016-06-03T12:28:57.403 回答