Revision 125
- Date:
- 2011/08/26 13:49:39
- Files:
Legend:
- Added
- Removed
- Modified
-
utf8/core/lib/Contenido/File.pm
186 186 } elsif ( $opts{filename} ) { 187 187 $ext = $opts{filename} =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin'; 188 188 } 189 if ( ref $fh eq 'IO::Scalar' ) { 190 $size = length("$fh"); 191 } 189 192 $ext ||= 'bin'; 190 193 191 194 my $fh_tmp = IO::File->new('>'.$filename_tmp.'.'.$ext) || return; … … 324 327 } 325 328 326 329 330 sub store_binary { 331 my $input = shift; 332 my (%opts) = @_; 333 my $object = delete $opts{object} || return; 334 my $attr = delete $opts{attr} || return; 335 336 my ($prop) = grep { $_->{attr} eq $attr } $object->structure; 337 return unless ref $prop; 338 339 my $filename = '/binary/'.$object->get_file_name() || return; 340 my $filename_tmp = $state->{'tmp_dir'}.'/'.join('_', split('/', $filename)); 341 342 my $fh = get_fh($input); 343 return unless ref $fh; 344 345 my $ext; 346 my $size = 1073741824; 347 if ( not ref $input ) { 348 $ext = $input =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin'; 349 if ( scheme($input) eq 'file' ) { 350 $size = (stat $fh)[7]; 351 } 352 } elsif ( ref $input eq 'Apache::Upload' ) { 353 $ext = $input->filename() =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin'; 354 $size = (stat $fh)[7]; 355 } elsif ( $opts{filename} ) { 356 $ext = $opts{filename} =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin'; 357 } 358 if ( ref $fh eq 'IO::Scalar' ) { 359 $size = length("$fh"); 360 } 361 $ext ||= 'bin'; 362 363 my $fh_tmp = IO::File->new('>'.$filename_tmp.'.'.$ext) || return; 364 my $buffer; 365 366 $size = sysread $fh, $buffer, $size; 367 syswrite $fh_tmp, $buffer, $size; 368 369 undef $fh_tmp; 370 371 my $BINARY; 372 if ( store($filename.'.'.$ext, $filename_tmp.'.'.$ext) ) { 373 $BINARY = { filename => $filename.'.'.$ext }; 374 unlink $filename_tmp.'.'.$ext if -e $filename_tmp.'.'.$ext; 375 } 376 377 return $BINARY; 378 } 379 380 sub remove_binary { 381 my $BINARY = shift; 382 383 if ( ref $BINARY eq 'HASH' && exists $BINARY->{filename} ) { 384 remove($BINARY->{'filename'}) || return; 385 } 386 387 1; 388 } 389 390 327 391 1; -
utf8/core/lib/Contenido/Object.pm
1132 1132 } 1133 1133 1134 1134 # ---------------------------------------------------------------------------- 1135 # Метод _image_store() генерит сохраняет графику, привязанную к полю image или images 1135 # Метод _store_image() сохраняет графику, привязанную к полю image или images 1136 1136 # 1137 1137 # Формат использования: 1138 # $document->_image_store( INPUT, attr => 'fieldname' ) 1138 # $document->_store_image( INPUT, attr => 'fieldname' ) 1139 1139 # ---------------------------------------------------------------------------- 1140 1140 sub _store_image { 1141 1141 my $self = shift; … … 1147 1147 return Contenido::File::store_image( $input, object => $self, attr => $opts{attr} ); 1148 1148 } 1149 1149 1150 # ---------------------------------------------------------------------------- 1151 # Метод _delete_image() удаляет файлы, связанные с полем image или images. 1152 # Вычищает все мини-копии 1153 # 1154 # Формат использования: 1155 # $document->_store_image( $image_attr_structure ) 1156 # ---------------------------------------------------------------------------- 1150 1157 sub _delete_image { 1151 1158 my $self = shift; 1152 1159 my $IMAGE = shift; … … 1154 1161 return Contenido::File::remove_image( $IMAGE ); 1155 1162 } 1156 1163 1164 # ---------------------------------------------------------------------------- 1165 # Метод _store_binary() сохраняет произвольный бинарный файл, привязанную к полю multimedia или multimedia_new 1166 # 1167 # Формат использования: 1168 # $document->_store_binary( INPUT, attr => 'fieldname' ) 1169 # ---------------------------------------------------------------------------- 1170 sub _store_binary { 1171 my $self = shift; 1172 do { $log->error("Метод delete() можно вызывать только у объектов, но не классов"); die } unless ref($self); 1173 1174 my $input = shift; 1175 my (%opts) = @_; 1176 1177 return Contenido::File::store_binary( $input, object => $self, attr => $opts{attr} ); 1178 } 1179 1180 # ---------------------------------------------------------------------------- 1181 # Метод _delete_binary() удаляет файлы, связанные с полем multimedia или multimedia_new. 1182 # Не пытается искать мини-копии 1183 # 1184 # Формат использования: 1185 # $document->_delete_binary( $binary_attr_structure ) 1186 # ---------------------------------------------------------------------------- 1187 sub _delete_binary { 1188 my $self = shift; 1189 my $BINARY = shift; 1190 1191 return Contenido::File::remove_binary( $BINARY ); 1192 } 1193 1157 1194 1; 1158 1195