Example Server-side File Upload Code

  1. #!/usr/bin/perl  
  2. use HTTP::Request;  
  3. use LWP::UserAgent;  
  4. use HTTP::Request::Common qw(POST);  
  5.   
  6. use strict;  
  7. my ($email$password$folderName$merchandiseId$storeId$sectionId$imagePath) = @ARGV;  
  8. if ($#ARGV+1 != 7) {  
  9.     die "Usage: upload.pl, email, password, folderName, merchandiseId, storeId, sectionId, imagePath";  
  10. }  
  11. my $host = 'cafepress.com';  
  12. my $appKey = '77888c76-60ac-44f1-8e88-207bc5a81234';  
  13. my $ua = new LWP::UserAgent;  
  14. my $authResponse = $ua->get( "http://api.$host/authentication.getUserToken.cp?appKey=$appKey&email=$email&password=$password&v=3" );  
  15. die "Error: "$authResponse->status_line unless $authResponse->is_success;  
  16. my $userToken = ($authResponse->content =~ /<value>(.*)<\/value/)[0];  
  17. print "User token $userToken\n";  
  18.   
  19. my @fileNames = <$imagePath/*.{jpg,gif,png}>;  
  20. foreach (@fileNames) {  
  21.         print "Uploading: $_\n";  
  22.         my $response = $ua->post("http://upload.$host/image.upload.cp",  
  23.                     Content_Type => 'form-data',  
  24.                     Content => [  
  25.                        folder => $folderName,  
  26.                        userToken => $userToken,  
  27.                        cpFile1 => [$_],  
  28.                     ]);  
  29.         die "Error: "$response->status_line  
  30.         unless $response->is_success;  
  31.         my $designId =  ($response->content =~ /<value>(.*)<\/value/)[0];  
  32.         print "Uploaded $_ to design id $designId\n";  
  33.   
  34.         my $product = "<product merchandiseId=\"$merchandiseId\" sellPrice=\"100.00\" description=\"test\" storeId=\"$storeId\" sectionId=\"$sectionId\"> <mediaConfiguration dpi=\"2000\" height=\"7.5\" width=\"10\" name=\"FrontCenter\" designId=\"$designId\" /> </product>";  
  35.         $response = $ua->post("http://api.$host/product.save.cp",  
  36.                     Content_Type => 'form-data',  
  37.                     Content => [  
  38.                        v=>3,  
  39.                        appKey => $appKey,  
  40.                        userToken => $userToken,  
  41.                        value => $product  
  42.                     ]);  
  43.     print $response->content;  
  44.         die "Error: "$response->status_line  
  45.         unless $response->is_success;  
  46.         my $productId =  ($response->content =~ /id="(.*)"/)[0];  
  47.         print "Created product $productId for design id $designId\n";  
  48. }