Amazon-S3-FastUploader
view release on metacpan or search on metacpan
lib/Amazon/S3/FastUploader/File.pm view on Meta::CPAN
".ps" => "application/postscript",
".psd" => "image/vnd.adobe.photoshop",
".py" => "text/x-script.python",
".qt" => "video/quicktime",
".ra" => "audio/x-pn-realaudio",
".rake" => "text/x-script.ruby",
".ram" => "audio/x-pn-realaudio",
".rar" => "application/x-rar-compressed",
".rb" => "text/x-script.ruby",
".rdf" => "application/rdf+xml",
".roff" => "text/troff",
".rpm" => "application/x-redhat-package-manager",
".rss" => "application/rss+xml",
".rtf" => "application/rtf",
".ru" => "text/x-script.ruby",
".s" => "text/x-asm",
".sgm" => "text/sgml",
".sgml" => "text/sgml",
".sh" => "application/x-sh",
".sig" => "application/pgp-signature",
".snd" => "audio/basic",
".so" => "application/octet-stream",
".svg" => "image/svg+xml",
".svgz" => "image/svg+xml",
".swf" => "application/x-shockwave-flash",
".t" => "text/troff",
".tar" => "application/x-tar",
".tbz" => "application/x-bzip-compressed-tar",
".tcl" => "application/x-tcl",
".tex" => "application/x-tex",
".texi" => "application/x-texinfo",
".texinfo" => "application/x-texinfo",
".text" => "text/plain",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".torrent" => "application/x-bittorrent",
".tr" => "text/troff",
".txt" => "text/plain",
".vcf" => "text/x-vcard",
".vcs" => "text/x-vcalendar",
".vrml" => "model/vrml",
".war" => "application/java-archive",
".wav" => "audio/x-wav",
".wma" => "audio/x-ms-wma",
".wmv" => "video/x-ms-wmv",
".wmx" => "video/x-ms-wmx",
".wrl" => "model/vrml",
".wsdl" => "application/wsdl+xml",
".xbm" => "image/x-xbitmap",
".xhtml" => "application/xhtml+xml",
".xls" => "application/vnd.ms-excel",
".xml" => "application/xml",
".xpm" => "image/x-xpixmap",
".xsl" => "application/xml",
".xslt" => "application/xslt+xml",
".yaml" => "text/yaml",
".yml" => "text/yaml",
".zip" => "application/zip",
};
sub upload {
my $self = shift;
my $bucket = $self->bucket;
my $s3 = $self->s3;
my $opt = {};
if ($self->config->{encrypt}) {
$opt->{"x-amz-server-side-encryption"} = 'AES256';
}
if ($self->config->{acl_short}) {
$opt->{acl_short} = $self->config->{acl_short};
}
# http://d.hatena.ne.jp/perlcodesample/20080518/1211121650
my (undef, undef, $ext) = fileparse($self->local_path, qw/\.[^\.]+$/);
#print $self->local_path, " ext:$ext \n";
if ($MIME_TYPES->{$ext}) {
$opt->{content_type} = $MIME_TYPES->{$ext};
}
my $count_failed = 0;
my $max_retry = 5;
my $is_success = 0;
while (! $is_success && $count_failed < $max_retry) {
$is_success = $bucket->add_key_filename($self->_remote_key, $self->local_path, $opt)
or do { warn $s3->err . ": " . $s3->errstr . "(" . $self->from_to .")" ; $count_failed++; };
if ($is_success) {
return 1;
}
}
die "upload failed " . $self->from_to;
}
sub from_to {
my $self = shift;
return $self->local_path . " -> " . $self->_remote_key;
}
sub _remote_key {
my $self = shift;
my $local_path = $self->{local_path};
$local_path =~ s|^\./||;
return $self->target_dir . $local_path;
}
=head1 NAME
Amazon::S3::FastUploader - fast uploader to Amazon S3
=head1 SYNOPSIS
This is an internal module of Amazon::S3::FastUploader.
=head1 METHODS
=head2 new
takes a hashref:
local_path: full path to a local file
target_dir: dirname on S3
bucket: a bucket object
config: config option (hashref)
=head2 upload
do uploading
content_type (mime type) is automatically determined by its extension name.
=head2 from_to
return a string wich shows source filename and target filename
=cut
1;
__END__
( run in 0.723 second using v1.01-cache-2.11-cpan-b16cb0d3907 )