我正在使用 perl
执行视频上传,并且我想确定视频扩展名,例如路径类似于 1lmZeK7M.1
.
如您所见,路径末尾有 .1
,而不是视频的文件扩展名。
如何在 Perl 中获取具有如上文件名的视频的文件扩展名?
最佳答案
显然,您必须查看文件本身。
模块File::LibMagic提供 libmagic 库的绑定(bind)。来自文档
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
。
在文件未知
上,我从一个好的.png
文件中复制了该文件
> file --mime-type unknown
returns the line unkown: image/png
. The extension is extracted from here by, for example,
my $info = `file --mime-type $filename`;
my ($name, $type, $ext) = $info =~ m| ([^:]+) : \s* ([^/]+) / (.*) |x;
/x
允许使用空格以提高可读性。 否定字符类 [^:]+
捕获除 :
之外的所有内容,因此所有内容都直到第一个 :
。然后 [^/]+
获取第一个 /
之前的所有内容。
请在所有预期的视频格式上测试文件
以查看准确的输出。
关于perl - 当文件具有 tmp 扩展名时确定 Perl 中的视频扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291356/