我有一个媒体的网址,我想得到这个媒体文件的mimetype,在Go语言中有什么有效的方法可以做到呢?我试过戈兰的mimetype图书馆
mtype := mimetype.Detect(body)
但它几乎需要500毫秒。如何做得更好?
krcsximq1#
如果您想提高性能,就应该避免下载内容。1.尝试使用HEAD方法创建请求以仅获取头(服务器应支持此方法),在某些情况下Content-Type将是非正式的1.选中Content-Disposition HEADER -可能Content-Type中包含application/octet-stream,但myfile.aac在其中-因此,在某些情况下,您可以按名称检测mime类型-某些情况下,将按文件扩展名进行检测1.检查服务器是否支持范围查询https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests-在这种情况下,您可以选择不读取整个文件,而只是其中的一部分-大多数二进制格式都有特殊的字节掩码,定义其内容类型-可能是mimetype包没有涵盖它,但在这种情况下,您可以编写您的-这不是那么多的工作所以你的策略是:1.进行HEAD查询-如果Content-Length和/或Content-Disposition标头包含所需信息-确定1.仅对前N个字节进行范围请求并检查格式标记如果服务器不支持Ranges和HEADER -执行GET查询,但不读取整个内容-只从流中获取头和前N个字节。
Content-Type
Content-Disposition
application/octet-stream
myfile.aac
mimetype
1条答案
按热度按时间krcsximq1#
如果您想提高性能,就应该避免下载内容。
1.尝试使用HEAD方法创建请求以仅获取头(服务器应支持此方法),在某些情况下
Content-Type
将是非正式的1.选中
Content-Disposition
HEADER -可能Content-Type
中包含application/octet-stream
,但myfile.aac
在其中-因此,在某些情况下,您可以按名称检测mime类型-某些情况下,将按文件扩展名进行检测1.检查服务器是否支持范围查询https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests-在这种情况下,您可以选择不读取整个文件,而只是其中的一部分-大多数二进制格式都有特殊的字节掩码,定义其内容类型-可能是
mimetype
包没有涵盖它,但在这种情况下,您可以编写您的-这不是那么多的工作所以你的策略是:
1.进行HEAD查询-如果Content-Length和/或Content-Disposition标头包含所需信息-确定
1.仅对前N个字节进行范围请求并检查格式标记
如果服务器不支持Ranges和HEADER -执行GET查询,但不读取整个内容-只从流中获取头和前N个字节。