/[Arh]/lib/Arh/Action/UploadPicture.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/Arh/Action/UploadPicture.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 53 - (hide annotations)
Sun Apr 6 20:49:32 2008 UTC (15 years, 11 months ago) by dpavlin
File size: 2221 byte(s)
fix various bugs to make picture upload from unit page to work
1 dpavlin 44 use strict;
2     use warnings;
3    
4     =head1 NAME
5    
6     Arh::Action::UploadPicture
7    
8     =cut
9    
10     package Arh::Action::UploadPicture;
11     use base qw/Arh::Action::CreatePicture/;
12    
13     use Data::Dump qw/dump/;
14 dpavlin 52 use Imager;
15 dpavlin 44
16     =head2 take_action
17    
18     =cut
19    
20 dpavlin 52 my $buf_size = 8192;
21     my $conf = Jifty->config->app('pictures') or die "no pictures";
22     my $path = $conf->{original_path} or die "no original_path";
23     my $scale = $conf->{scale} or die "no scale";
24    
25 dpavlin 44 sub take_action {
26     my $self = shift;
27    
28     if ( my $fh = $self->argument_value('content') ) {
29    
30     my $filename = scalar( $fh );
31     $filename =~ s/^.*([\/\\])([^\1]+)$/$2/;
32    
33 dpavlin 48 if ( $filename !~ m/\.(jpg|jpeg|png|gif|tif|tiff)$/i ) {
34     $self->result->error("unknown file type $filename");
35     return;
36     }
37    
38 dpavlin 52 if ( ! -e $path ) {
39     mkdir $path or die "can't create $path: $!";
40     }
41 dpavlin 44
42 dpavlin 52 # FIXME add check of maximum upload size
43    
44     open(my $fh_out, '>', "$path/$filename" ) or die "can't open $path/$filename: $!";
45     my $buff = ' ' x $buf_size;
46     while( read($fh, $buff, $buf_size) ) {
47     print $fh_out $buff or die "can't write to $filename: $!";
48     }
49     close($fh_out) or die "can't close $filename: $!";
50    
51     warn "## $self take_action resize $filename [", -s "$path/$filename", " bytes]\n";
52    
53     my $image = Imager->new;
54     $image->read( file => "$path/$filename" ) or die $image->errstr;
55    
56     my $content;
57    
58     my $scaled_image = $image->scale( %$scale ) or die $image->errstr;
59     undef $image;
60 dpavlin 53
61 dpavlin 52 $scaled_image->write(
62     data => \$content,
63     type => 'jpeg',
64     # jpegquality => 95,
65 dpavlin 53 ) or die $scaled_image->errstr;
66 dpavlin 52 undef $scaled_image;
67    
68     warn "## resized to ",length($content), " bytes...";
69    
70 dpavlin 48 $self->argument_value( 'filename' => $filename ); # needed for report_success
71 dpavlin 44 $self->argument_value( 'content' => $content );
72    
73 dpavlin 48 my $id = $self->SUPER::take_action( @_ );
74    
75     # update database with correct filename (why do I need this?)
76     $self->record->set_filename( $filename );
77    
78     return $id;
79    
80     } else {
81     $self->result->error("No file uploaded!");
82 dpavlin 44 }
83    
84     }
85    
86     =head2 report_success
87    
88     =cut
89    
90     sub report_success {
91     my $self = shift;
92 dpavlin 52 $self->result->message( 'Created ' . $self->argument_value('filename') . ' [' . length( $self->argument_value('content') ) . ' bytes]' );
93 dpavlin 44 warn "## report_success ", dump( $self->result );
94     }
95    
96     1;
97    

  ViewVC Help
Powered by ViewVC 1.1.26