如何从terminal更改文件的MIMEtypes?

我正在寻找的是file -I (在Linux上的Darwin; -i)的对应file -I

例如,给出:

 $ file -I filename.pdf filename.pdf: application/octet-stream; charset=binary 

我希望能够做到这样的事情:

 $ [someCommand] filename.pdf application/pdf 

结果将会是filename.pdf将被input为application / pdf。

问题的原因是,有时Web服务器使用错误的MIMEtypes,导致程序拒绝打开文件。 (根据我的经验,大部分是文本/简单的。)

我一直在寻找man ,networking和这个网站大约两个半小时。 尝试了从hex转储到xattr到文本编辑器的一切。

你的帮助将非常感激。

克里斯

Solutions Collecting From Web of "如何从terminal更改文件的MIMEtypes?"

关于MIME类型的东西几乎全是虚构的。

MIME和HTTP要求我们假装我们所有的文件都有一段标识“内容类型”的元数据。 当我们在网络上发送文件时,“内容类型”元数据会随之一起传输,所以没有人误解文件的内容。

事实是这个元数据不存在。 在MIME发明的时候,说服任何OS厂商采用新型文件系统实在太迟了。 Unix已经解决了神奇的数字,DOS已经解决了3个字母的文件名后缀,而经典的MacOS有它的创建者代码和类型代码。 (MacOS类型代码最接近MIME模型,因为它们实际上与文件名和内容是分开的,但是只有4个字母,MIME类型不适合。

没有人在他们的文件系统中存储MIME兼容的内容类型。 当MIME消息编写器或HTTP服务器想要发送文件时,它以传统方式(文件名后缀和/或幻数)决定文件类型并将结果映射到MIME类型。

与理论(其中MIME消除文件类型猜测)相反,在实践中实施的MIME已经将来自文件接收者的“基于文件名后缀和/或幻数的猜测文件类型”逻辑移动到发送者。 正如你已经注意到的那样,发送者通常并不比接收者如果被迫自己弄清楚会做得更好。 对于Web服务器,通常情况下,服务器对文件上的Content-type进行拍照的渴望使事情变得更糟。 当Web服务器仅用于分发文件时,没有理由知道它所服务的文件的格式,也不需要解释它们的内容。

file命令通过读取内容并寻找幻数和字符串来猜测文件类型。 -I选项不会改变这一点。 它只是选择不同的输出格式。

要更改Web服务器为特定文件发送的Content-Type标头,您应该查看Web服务器的配置手册。 没有什么可以做的文件本身。

如果你有一个pdf $file --mime-type$file --mime-type命令回答了octet-stream而不是application/pdf ,那么你的文件就有一个损坏。

pdf阅读器将阅读它,并忽略这个问题,但是如果你把这个文件上传到一个web应用程序,应用程序将把mime类型识别为八位字节流。 有时这是一个问题,主要是如果你验证MIME类型(我有时在我的应用程序中有这个问题)。

为了得到一个快速的解决方案,使用像这样的鬼脚本:

 gs -o new.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress old.pdf 

谈论“文件的MIME类型”是一个类别错误 – “文件”没有MIME类型; 只有八位字节流有他们(我不一定不同意@ wumpus-q-wumbley的MIME类型描述为“虚构”,但这是另一种思考方式)。

MIME代表多用途互联网邮件扩展Multipurpose Internet Mail Extensions) ,正如在RFC 2045中所描述的那样,MIME类型最初是为了描述接收者应该怎样处理电子邮件的其余部分中的一堆字节。 他们非常自然地(例如)HTTP协议的用途,以让客户端了解如何解释这个MIME类型构成头部的HTTP响应中的字节。

file命令可以显示一个MIME类型的事实表明这个思想的进一步扩展,作为让窗口系统查找应该用来打开文件的应用程序的名称的关键。

因此,如果“文件的MIME类型”表示任何内容,则意味着“如果要响应HTTP请求传送,Web服务器将为此文件添加前缀的MIME类型”(或类似内容)。 如此看来,很显然,MIME类型是Web服务器配置的一部分,而不是文件的固有内容 – 单个文件可能会根据检索到的URL和各种MIME类型提供,请求的详细信息和配置。 因此,根据HTTP请求的细节,文件所在的目录,或者实际上是月亮的阶段(后者将是一个XHTML文件),XHTML文件可能以text/htmlapplication/xmlapplication/octet-stream 无用的服务器配置)。

Web服务器可能有许多机制来决定这种MIME类型,这可能包括基于任何文件扩展名, .htaccess文件或file命令输出的查找表。

所以你的问题的答案是: 这取决于

  • 如果你想做的是改变Web服务器如何传递这个文件,那么你需要看看你的Web服务器文档 ,或者你的系统的/etc/mime.types文件的内容(如果你的系统使用了这个文件,服务器被配置为回退)。
  • 如果你想要做的是改变打开给定(类型)文件的应用程序,那么你的OS /窗口管理器文档应该有所帮助。
  • 如果您需要特别更改file命令的输出,出于某种其他原因,那么man file就是您的朋友,您可能需要小心翼翼地在magic number文件中进行修改。