perl - 当文件具有 tmp 扩展名时确定 Perl 中的视频扩展名

标签 perl

我正在使用 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/

相关文章:

Perl 拉丁语 9? Unicode - 需要添加支持

arrays - Perl:使用数组列表来选择特定列

正则表达式:刚果共和国,但不是刚果民主共和国

perl - 如果 Perl 中已存在目录,如何创建目录但将其删除?

linux - 使用 Perl 在终端上列出目录

perl - 窥探不同 plack 中间件之间的 http header

perl - cpanm 如何检索需要用户名和密码的代理设置

regex - Perl 简单正则表达式下划线分隔的大写单词

perl - Perl 中的 "Use of uninitialized value in scalar chomp"

c++ - 在 C++ 中复制 perl 的解包