什么Perl模块将文件扩展名(.txt,.jpeg)转换为mime类型(text / plain,image / jpeg)?

时间:2014-04-03 03:45:30

标签: perl module mime-types

什么Perl模块将文件扩展名(.txt,.jpeg)转换为mime类型(text / plain,image / jpeg)?

我想要

my $mime = file_to_mime ("some.txt");
# $mime = 'text/plain'

2 个答案:

答案 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;