Node.js中如何获取无格式信息文件名的媒体类型与格式?
如何获取无格式信息文件名对应的标准MIME类型(如image/png)
下面是几个可靠的替代方案,避开你遇到的mediainfo缺库、ffprobe不支持图片的问题:
1. 使用原生file命令(Linux/macOS/Windows兼容)
这是最便捷的跨平台方案,依赖文件的**魔术数(文件头特征)**检测MIME类型,无需额外安装依赖(Linux/macOS默认自带,Windows可通过Git Bash、WSL或单独安装GNU File工具使用)。
执行命令:
file --mime-type <目标文件名>
示例输出:
your_file: image/png
直接提取冒号后的内容就是你需要的标准MIME格式。
2. 用Python脚本批量/程序化检测
如果需要集成到代码中,推荐使用python-magic库(基于libmagic,和file命令底层逻辑一致):
- 先安装依赖:
pip install python-magic # Windows用户可能需要额外安装libmagic二进制包,可通过conda或手动下载对应版本
- 检测脚本示例:
import magic def get_file_mime_type(file_path): # 初始化magic对象,指定只返回MIME类型 mime_detector = magic.Magic(mime=True) return mime_detector.from_file(file_path) # 调用示例 print(get_file_mime_type("your_target_file"))
执行后会直接返回image/png这类标准格式。
3. Windows PowerShell原生方案
如果是纯Windows环境,可通过读取文件头并匹配已知图片格式的魔术数来实现,示例脚本:
function Get-ImageMimeType { param([string]$FilePath) $fileStream = [System.IO.File]::OpenRead($FilePath) $bytes = New-Object byte[] 8 $fileStream.Read($bytes, 0, 8) | Out-Null $fileStream.Close() # 匹配常见图片格式的魔术数 switch -Wildcard ($bytes) { "89 50 4E 47*" { return "image/png" } "FF D8 FF*" { return "image/jpeg" } "47 49 46 38*" { return "image/gif" } "52 49 46 46*" { return "image/webp" } default { return "unknown/image" } } } # 调用示例 Get-ImageMimeType -FilePath "C:\path\to\your_file"
这个脚本无需额外安装工具,直接通过PowerShell执行,适合Windows专属场景。
内容的提问来源于stack exchange,提问作者Ur Niiicb
相关产品推荐
相关产品推荐

