什么Perl模块将文件扩展名(.txt,.jpeg)转换为mime类型(text / plain,image / jpeg)?
我想要
my $mime = file_to_mime ("some.txt");
# $mime = 'text/plain'
答案 0 :(得分:5)
虽然davewood的答案是正确的,但它会做很多检查并使事情变得非常明确。 MIME::Types
开箱即用是正确的事情!
无需拆分文件名即可解压缩文件扩展名。如果您提供带扩展名的文件名,它将自行提取。 如果文本没有扩展名,那么它将使用该字符串作为扩展名。
use strict;
use warnings;
use MIME::Types; # by Mark Overmeer
my $filename = "some.txt";
my $MIME_Types = MIME::Types->new;
my $mimetype = $MIME_Types->mimeTypeOf($filename)
or die "Could not find MIME type for '$filename'";
print "Filename '$filename' of MIME type '$mimetype'\n";
注意:绝不仅仅依赖于扩展程序,您可能会考虑File::Type
内省文件本身或更新的模块File::MimeInfo::Magic
。
答案 1 :(得分:1)
编辑:Th.J的回答。可能更好。 (https://stackoverflow.com/a/22832209/1702521)但为了完整起见,我将保留未经编辑的保护。
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw/ say /;
use MIME::Types;
my $file = "foo.txt";
my $mime_types = MIME::Types->new( only_complete => 1 );
$mime_types->create_type_index;
my ($ext) = $file =~ /\.(.+?)$/;
die "Could not find file extension. (" . $file . ")"
unless defined $ext;
my $content_type = $mime_types->mimeTypeOf($ext);
die "No content-type found for '$ext'"
unless defined $content_type;
say $content_type;