#!/usr/bin/perl use strict; use warnings; use Digest::HMAC_SHA1; use File::Basename; use File::Slurp; use LWP::UserAgent; use POSIX qw(strftime); use URI::Escape; # Define our Access Key Id, and Secret Access Key. use constant ACCESS_KEY_ID => 'xxxxxxxxxxxxxxxxxxxx'; use constant SECRET_ACCESS_KEY => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; # Uploads a single file to PDF Alchemy. sub uploadFile { my $filename=shift(@_); print "Uploading '$filename': "; # Generate the HMAC signature. my $date=strftime '%a, %d %b %Y %H:%M:%S GMT', gmtime; my $request='/'.ACCESS_KEY_ID.'/inqueue/'.uri_escape(basename($filename)); my $hmac=Digest::HMAC_SHA1->new(SECRET_ACCESS_KEY); $hmac->add("PUT\n".ACCESS_KEY_ID."\n$date\n$request"); my $signature=$hmac->b64digest; while (length($signature)%4) { $signature.='='; } # Upload the file to PDF Alchemy. my @headers=('Date'=>$date,'X-PDF-Alchemy-Signature'=>$signature); my $browser=LWP::UserAgent->new; my $req=HTTP::Request->new(PUT=>"http://www.pdfalchemy.com$request",HTTP::Headers->new(@headers)); $req->content(read_file($filename,binmode=>':raw')); my $response=$browser->request($req); print $response->content."\n"; } # Uploads all convertable files from a single directory, to PDF Alchemy. sub uploadFilesInDir { my $dirname=shift(@_); opendir(DIR, $dirname) || die "can't opendir $dirname: $!"; while (my $filename=readdir(DIR)) { uploadFile $filename if $filename =~ m/\.(doc|docx|rtf|txt)/; } closedir DIR; } # Process the command line arguments. foreach my $arg (@ARGV) { uploadFile $arg if -f $arg; uploadFilesInDir $arg if -d $arg; }