Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dev:webapi:pwg.images.upload [2015/06/16 09:51]
plg created
— (current)
Line 1: Line 1:
-====== pwg.images.upload ====== 
- 
-Add a photo. 
- 
-Similar to pwg.images.addChunk + pwg.images.add, but simpler and better suited for Piwigo 2.7+ 
- 
-===== Authentication ===== 
- 
-This method requires authentication with an administrator user. 
- 
-This method requires an HTTP POST request. 
- 
-This method also requires a pwg_token (session valid key). 
- 
-===== Parameters ===== 
- 
-__**Important note**__: we are uploading a file, so the HTTP request encoding must be set to "form-data". 
- 
-^Key^Example^Mandatory?^Description^ 
-|image | /path/to/file.jpg | **mandatory** | the uploaded file. JPG or PNG files only. | 
-|category | 123 | **mandatory** | the identifier of the destination category, use pwg.categories.getList to find existing categories | 
-|pwg_token | verylongstring | **mandatory** | this is a session key, once identified you can get it with method pwg.session.getStatus | 
-|chunks | 12 | //optional// | number of expected chunks | 
-|chunk | 0 | //optional// | current chunk number, from 0 to chunks-1 | 
-|name | A nice title | //optional// | the title of your photo, don't make it too long (use the comment to go into details | 
-|name | A nice title | //optional// | the title of your photo, don't make it too long (use the comment to go into details | 
-|level | 2 | //optional// | (default = 0) privacy setting. See an example in your Piwigo on screen Administration > Photos > Add. 0 is for everybody, 8 is for admins only | 
- 
-===== Example ===== 
- 
-Here comes a full example in Perl language (see the most updated version on [[http://piwigo.org/dev/browser/trunk/tools/piwigo_upload.pl|piwigo_upload.pl on source code repository]]): 
- 
-<code perl>#!/usr/bin/perl 
- 
-#### 
-# Usage 
-# 
-# perl piwigo_upload.pl --url=http://piwigo.org/demo --user=admin --password=secret --file=photo.jpg --album_id=9 
- 
-use strict; 
-use warnings; 
- 
-use JSON; 
-use LWP::UserAgent; 
-use Getopt::Long; 
-use POSIX qw(ceil floor); 
-use Digest::MD5 qw/md5 md5_hex/; 
-use File::Slurp; 
-use File::Basename; 
- 
-my %opt = (); 
-GetOptions( 
-    \%opt, 
-    qw/ 
-          file=s 
-          album_id=i 
-          category=s 
-          url=s 
-          username=s 
-          password=s 
-      / 
-); 
- 
-our %conf = ( 
-    chunk_size => 500_000, 
-); 
- 
-our $ua = LWP::UserAgent->new; 
-$ua->agent('Mozilla/piwigo_upload.pl 1.56'); 
-$ua->cookie_jar({}); 
- 
-my $result = undef; 
- 
-my $form = { 
-    method => 'pwg.session.login', 
-    username => $opt{username}, 
-    password => $opt{password}, 
-}; 
- 
-$result = $ua->post( 
-    $opt{url}.'/ws.php?format=json', 
-    $form 
-); 
- 
-my $response = $ua->post( 
-    $opt{url}.'/ws.php?format=json', 
-    { 
-        method => 'pwg.session.getStatus', 
-    } 
-); 
- 
-my $pwg_token = from_json($response->content)->{result}->{pwg_token}; 
- 
-my $content = read_file($opt{file}); 
-my $content_length = length($content); 
-my $nb_chunks = ceil($content_length / $conf{chunk_size}); 
- 
-my $chunk_pos = 0; 
-my $chunk_id = 0; 
- 
-while ($chunk_pos < $content_length) { 
-    my $chunk = substr( 
-        $content, 
-        $chunk_pos, 
-        $conf{chunk_size} 
-    ); 
- 
-    # write the chunk as a temporary local file 
-    my $chunk_path = '/tmp/'.md5_hex($opt{file}).'.chunk'; 
- 
-    open(my $ofh, '>'.$chunk_path) or die "problem for writing temporary local chunk"; 
-    print {$ofh} $chunk; 
-    close($ofh); 
- 
-    $chunk_pos += $conf{chunk_size}; 
- 
-    my $response = $ua->post( 
-        $opt{url}.'/ws.php?format=json', 
-        { 
-            method => 'pwg.images.upload', 
-            chunk => $chunk_id, 
-            chunks => $nb_chunks, 
-            category => $opt{album_id}, 
-            pwg_token => $pwg_token, 
-            file => [$chunk_path], 
-            name => basename($opt{file}), 
-        }, 
-        'Content_Type' => 'form-data', 
-    ); 
- 
-    unlink($chunk_path); 
- 
-    printf( 
-        'chunk %03u of %03u for "%s"'."\n", 
-        $chunk_id+1, 
-        $nb_chunks, 
-        $opt{file} 
-    ); 
- 
-    if ($response->code != 200) { 
-        printf("response code    : %u\n", $response->code); 
-        printf("response message : %s\n", $response->message); 
-    } 
- 
-    $chunk_id++; 
-} 
- 
-$result = $ua->get( 
-    $opt{url}.'/ws.php?format=json', 
-    { 
-        method => 'pwg.session.logout' 
-    } 
-);</code> 
  
 
Back to top
dev/webapi/pwg.images.upload.1434448272.txt.gz · Last modified: 2015/06/16 09:51 by plg
 
 
github twitter newsletter Donate Piwigo.org © 2002-2024 · Contact