我正在使用perl
执行视频上传,并且我希望确定视频扩展名,例如路径类似于1lmZeK7M.1
。
如您所见,路径最后是.1
,而不是视频的文件扩展名。
如何使用上述文件名获取Perl中视频的文件扩展名?
答案 0 :(得分:2)
显然,你必须查看文件本身。
模块File::LibMagic为libmagic
库提供绑定。来自文档
use File::LibMagic;
my $magic = File::LibMagic->new();
my $info = $magic->info_from_filename('path/to/file');
print $info->{description}; # description, like "ASCII text"
print $info->{mime_type}; # MIME type, like "text/plain"
但是,可能未安装库libmagic
本身。
另一个可能有用的模块是File::Properties,面向媒体文件。
最后,如果编译模块的障碍太大,我们可以使用系统实用程序
my $info = `file $file`;
然后解析视频相关短语的输出。或者,也许使用file
选项--mime-type
。
在文件unknown
上,我复制了一个好的.png
文件
> file --mime-type unknown
返回行unkown: image/png
。例如,通过
my $info = `file --mime-type $filename`;
my ($name, $type, $ext) = $info =~ m| ([^:]+) : \s* ([^/]+) / (.*) |x;
/x
允许空格以便于阅读。 否定字符类 [^:]+
会捕获除:
以外的所有内容,因此一直到:
。然后[^/]+
将所有内容放到第一位/
。
对所有预期的视频格式进行PLease测试file
,以查看确切的输出。