C# 创建 MIME 标头信息? (内容类型等)

Posted

技术标签:

【中文标题】C# 创建 MIME 标头信息? (内容类型等)【英文标题】:C# Create MIME Header Information? (Content-Type etc.) 【发布时间】:2011-03-16 12:01:58 【问题描述】:

我正在读取一个文件并希望将 MIME 标头信息添加到文件顶部。

例如:我有一个名为 test.txt 的文本文件。我将文件读入字节数组,然后想将以下内容附加到开头:

Content-Type: text/plain;
     name="test.txt"
Content-Transfer-Encoding: binary
Content-Disposition: attachment;
     filename="test.txt"

我怎样才能得到内容类型是什么?您如何建议将其添加到文件的开头?我正计划使用该信息创建一个字符串,然后将其转换为字节数组并将其粘贴在我的文件缓冲区的前面,但我担心会遇到编码问题。

【问题讨论】:

在检测文件类型时需要得到多细的粒度?您是要识别 xml、html、jpg、gif、png、exe、pdf、doc 等,还是只是在文本和二进制文件之间做出选择? 【参考方案1】:

您不能将标题信息添加到文件本身;当您使用某些协议(主要是 SMTP 和 HTTP)时,它会与文件一起传输。

编辑:如果您想从文件内容中计算出内容类型(也称为Internet media type),您可能希望查看mime-util 或Apache Tika 之类的内容。

编辑 2:这个问题的答案将有助于 .NET 中的内容类型检测:

Using .NET, how can you find the mime type of a file based on the file signature not the extension?

编辑 3:如果您知道您正在处理的文件格式,您可以添加任何您希望的任意信息。不过,您需要对每种文件格式进行特殊处理。我无法想象您为什么要在文件中包含协议信息,但这取决于您!

编辑 4:将文本添加到文本文件的开头:

static void WriteBeginning(string filename, string insertedtext)

    string tempfile = Path.GetTempFileName();
    StreamWriter writer = new StreamWriter(tempfile);
    StreamReader reader = new StreamReader(filename);
    writer.WriteLine(insertedtext);
    while (!reader.EndOfStream)
        writer.WriteLine(reader.ReadLine());
    writer.Close();
    reader.Close();
    File.Copy(tempfile, filename, true);

(credit)

【讨论】:

以上是关于C# 创建 MIME 标头信息? (内容类型等)的主要内容,如果未能解决你的问题,请参考以下文章

[HTTP-3]-HTTP报文内的HTTP信息(下)

将带有 MIME 标头的文件保存到文件

HTTP 标头值解析:引用、RFC 5987、MIME 等

Websphere Application Server 7 中的 HTTP 标头 Mime 类型

给定 MIME 消息的文本表示,我如何重新创建该消息?

重新发送 MIME 电子邮件中的标头