【问题标题】:How to find out an extension's content type?如何找出扩展的内容类型?
【发布时间】:2011-01-21 16:23:03
【问题描述】:

在哪里可以找到特定文件格式/扩展名的内容类型? 例如,我知道 mp3 可以是以下内容类型之一:

'application/mp3', 'application/x-mp3', 'audio/mpeg', 'audio/mp3'

zip 文件的内容类型是什么?我在哪里可以找到其他内容类型的信息?

我需要这个来验证 ruby​​ on rail 的回形针插件。

谢谢!


更新:我刚刚找到this,并认为它可能对其他人有用

【问题讨论】:

    标签: ruby-on-rails file-upload content-type paperclip


    【解决方案1】:

    我知道 mp3 可以是以下内容类型之一

    只有audio/mpeg 有效。其余的都是假的,一般不会在任何地方工作。

    zip 文件的内容类型是什么?

    application/zip.

    我在哪里可以找到其他内容类型的信息?

    所有已注册媒体类型的正确列表是at IANA。当然,还有很多类型没有注册,主要是带有x前缀的类型。

    如果您想即时了解您的机器认为特定扩展使用服务器端脚本是什么,您可以在特定于操作系统的位置找到它。在 Windows 上,文件扩展名/类型信息存储在注册表中。在桌面 Linux 上,它位于 /usr/share/mime。在 Apache Web 服务器上,您可能希望重用 Apache 的 mime.types 表。

    对于特定的文件格式/扩展名?

    文件扩展名是非标准化的,不是检查网络上资源类型的可靠方法,包括文件上传。文件扩展名到媒体类型的映射是特定于操作系统/安装的问题,因此您无法从另一台机器上的扩展名中知道文件是什么媒体类型。此外,一些操作系统甚至不使用文件扩展名来确定类型(或仅将它们用作后备)。

    即使查看文件上传提供的Content-Type 也没什么用,因为由于客户端设置错误,它经常出错。我想这就是为什么像application/mp3 这样的虚假类型会悄悄进入上面的列表的原因,因为有时某个浏览器在一台设置错误的机器上的某个地方发送了错误的类型。但是浏览器总是可以发送任何旧的错误类型...您同样可能会收到text/plain MP3。

    如果您需要允许用户为上传的资源设置明确的内容类型,您必须让他们手动选择它。当然,您可以使用一些脚本破解来做出有用的猜测,例如“如果它以 .jpeg 结尾,它可能是 JPEG”并自动做出选择。但在一般情况下,从用户提交的文件扩展名中猜测类型是不可靠的。

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 2010-12-26
      • 2011-05-27
      • 2022-12-19
      • 2011-07-29
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多