V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xlsepiphone
V2EX  ›  程序员

Golang 的 http.DetectContentType 有更好的替代实现吗?

  •  
  •   xlsepiphone · 2021-09-12 18:13:40 +08:00 · 2352 次点击
    这是一个创建于 1187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我发现 http.DetectContentType 无法识别出一个 mp4 文件的文件类型。

    只会返回application/octet-stream

    http.DetectContentTypenet/http 包提供的一个方法,可以用于识别文件的类型。但是目前看来支持并不完善。

    在 GitHub 上看到有相关的讨论,但是貌似没有结论。

    直接在命令行用 file 命令是没问题的。

    # file 命令输出如下
    ISO Media, MP4 Base Media v1 [IS0 14496-12:2003]
    

    ps.用过文件扩展名判断不靠谱,所以想通过文件头判断。

    第 1 条附言  ·  2021-09-13 11:37:22 +08:00

    最后还是用的github.com/gabriel-vasile/mimetype这个库,因为https://github.com/h2non/filetype会把我的mp4封装格式的电影识别成video/quicktime。而mimetype库会识别成video/mp4

    然后然我用ffprobe看,输出如下(H.264编码的)

    format_name=mov,mp4,m4a,3gp,3g2,mj2
    format_long_name=QuickTime / MOV
    

    我用了解到的浅薄的视频编码相关的知识无法解释上述现象,因为我理解mov和mp4应该都是视频封装格式。为什么一会儿是mov一会儿又是mp4。

    我用Mac下的Finder查看视频信息,显示的又是 MPEG-4影片,完全糊涂了。

    4 条回复    2021-09-12 18:46:33 +08:00
    wangbenjun5
        1
    wangbenjun5  
       2021-09-12 18:34:42 +08:00
    自己 fix 。。。或者改需求,正常来说,通过扩展名都能识别出啊,没必要 detect
    xlsepiphone
        2
    xlsepiphone  
    OP
       2021-09-12 18:35:58 +08:00
    @wangbenjun5 #1 很多扩展名是重复的,从扩展名你无法知道这是一个什么文件,例如是图片还是视频。
    leo2n
        3
    leo2n  
       2021-09-12 18:43:34 +08:00   ❤️ 1
    xlsepiphone
        4
    xlsepiphone  
    OP
       2021-09-12 18:46:33 +08:00
    @leo2n #3 结贴!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2784 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.