【问题标题】:How to set MIME by file RIFF header using Nginx?如何使用 Nginx 通过文件 RIFF 标头设置 MIME?
【发布时间】:2013-03-19 18:33:44
【问题描述】:

我的文件是用它的哈希名称保存的,没有扩展名。但我确定它是 WAV、MP3 等 RIFF 文件。如何使用 nginx 添加 MIME 取决于它的 RIFF 标头?

编辑: 大部分文件是mp3格式,所以我使用下面的位置块。

config
location /audio/ {
     #default_type "audio/mpeg";
}

【问题讨论】:

  • 请显示您将这些请求映射到文件的位置块。

标签: nginx


【解决方案1】:

如何使用 nginx 添加 MIME 取决于它的 RIFF 标头?

你不能。 Nginx 不支持检查文件,然后根据其内容发送适当的标头。

但是,您可以选择以下几种方法:

1) 将请求发送到您的网络服务器,检查代码中的文件,然后使用将X-Accel header 发送到 nginx header("X-Accel-Redirect: ".$filenameToProxy);

这将使 nginx 为文件提供服务,只需要很少的处理时间来检查文件。

2) 在文件的 URL 中保留扩展名,即使它存储时没有扩展名。当您提供指向文件的链接时,您应该保留附加的扩展名,因为这允许用户查看将要提供的文件类型,并且它还允许 nginx 提供适当的 mime 类型。 (我想虽然我还在测试这个)

location ~* /audio/(.*)(wav|mp3|avi|ani) {
    add_header Content-Type $content_type
    try_files  /audio/$1
}

3) 只需为所有文件保留扩展名即可。严重地。为什么要去掉文件的扩展名?

【讨论】:

    【解决方案2】:

    RIFF 是一种 WAV 文件,因此您应该可以使用:

    wav audio/wav
    wav audio/x-wav
    

    【讨论】:

    • 其实Riff是一个容器,不是内容类型,可以包含视频也可以包含音频。 en.wikipedia.org/wiki/Resource_Interchange_File_Format
    • @Danack 是的,但在这种情况下(根据他的问题,音频)很可能是他正在处理的 WAV 格式。
    • '最有可能' - 我确信这至少有 50% 的时间有效。
    • “大部分文件是 mp3 格式”。因此,仅将内容类型设置为 wav 不太可能很好地工作。
    【解决方案3】:

    接下来呢?它不会产生预期的效果吗?

    location /audio/ {
        default_type audio/mpeg;
    }
    

    还是以下?

    location /audio/ {
        default_type audio/wav;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 2015-10-16
      • 1970-01-01
      相关资源
      最近更新 更多