从解码的base64 MIME部分获取Byte []

时间:2018-08-24 13:03:13

标签: mimekit

我们从各个实体接收文件,这些文件中可能包含base64编码的MIME部分(PDF)。我们将其提取并存储以供以后打开。对于除其中一个实体以外的所有实体,此方法都正常运行。他们的文件将保存,但无法打开。

这是代码:

        public byte[] GetAttachmentByName(string name)
    {
        foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>())
        {
            if (attachment.ContentId != name)
                continue;

            using (var stream = new System.IO.MemoryStream())
            {
                using (var filtered = new FilteredStream(stream))
                {
                    filtered.Add(DecoderFilter.Create("base64"));
                    attachment.ContentObject.DecodeTo(filtered);

                    return stream.ToArray();
                }
            }
        }

        return null;}

这是MIME的一部分:

MIME版本:1.0 内容类型:多部分/相关; boundary =“ =-antAW7IrKfe1DvH3559M9g ==”

...

-=-antAW7IrKfe1DvH3559M9g == 内容类型:应用程序/ pdf 内容传输编码:base64 内容描述: 内容ID:“ AC13127925.pdf”

...

bGVyDTw8IA0vU2l6ZSAxODkgDS9Sb290IDE4OCAwIFIgDS9JbmZvIDEgMCBSIA0 + PiANc3Rh cnR4cmVmDTU3MzU3MiANJSVFT0YN

-=-antAW7IrKfe1DvH3559M9g ==-

(我包括了MIME部分的开始,中间和结尾。文件的另一部分中也有XML,但这已经可以很好地处理了。我们遇到的问题是MIME / PDF。)< / p>

任何指导都值得赞赏。

1 个答案:

答案 0 :(得分:1)

MimeContent.DecodeTo()方法已经为您解码了base64,因此您需要将代码更改为此:

public byte[] GetAttachmentByName(string name)
{
    foreach (var attachment in _mimeMessage.BodyParts.OfType<MimePart>())
    {
        if (attachment.ContentId != name)
            continue;

        using (var stream = new System.IO.MemoryStream())
        {
            attachment.ContentObject.DecodeTo(filtered);

            return stream.ToArray();
        }
    }

    return null;
}