我有一个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();
}
}
}
}
这样做有什么我缺的吗?
答案 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();
}
}
}