|
Lines 76-81
use C4::Koha;
Link Here
|
| 76 |
use Koha::UploadedFile; |
76 |
use Koha::UploadedFile; |
| 77 |
use Koha::UploadedFiles; |
77 |
use Koha::UploadedFiles; |
| 78 |
|
78 |
|
|
|
79 |
|
| 80 |
BEGIN { |
| 81 |
if (C4::Context->preference('SwiftStorage')){ |
| 82 |
require Net::OpenStack::Swift; |
| 83 |
import Net::OpenStack::Swift; |
| 84 |
} |
| 85 |
} |
| 86 |
|
| 79 |
__PACKAGE__->mk_ro_accessors( qw|| ); |
87 |
__PACKAGE__->mk_ro_accessors( qw|| ); |
| 80 |
|
88 |
|
| 81 |
=head1 INSTANCE METHODS |
89 |
=head1 INSTANCE METHODS |
|
Lines 204-209
sub _init {
Link Here
|
| 204 |
$self->{files} = {}; |
212 |
$self->{files} = {}; |
| 205 |
$self->{uid} = C4::Context->userenv->{number} if C4::Context->userenv; |
213 |
$self->{uid} = C4::Context->userenv->{number} if C4::Context->userenv; |
| 206 |
$self->{public} = $params->{public}? 1: undef; |
214 |
$self->{public} = $params->{public}? 1: undef; |
|
|
215 |
$self->{swift} = C4::Context->preference('SwiftStorage'); |
| 207 |
} |
216 |
} |
| 208 |
|
217 |
|
| 209 |
sub _fh { |
218 |
sub _fh { |
|
Lines 216-221
sub _fh {
Link Here
|
| 216 |
sub _create_file { |
225 |
sub _create_file { |
| 217 |
my ( $self, $filename ) = @_; |
226 |
my ( $self, $filename ) = @_; |
| 218 |
my $fh; |
227 |
my $fh; |
|
|
228 |
|
| 229 |
if ($self->{swift}){ |
| 230 |
# We are uploading in to a swift object store, not local files |
| 231 |
# Authenticate to swift, bail out if we can't |
| 232 |
# |
| 233 |
# Maybe shift this to its own sub next |
| 234 |
my $sw = Net::OpenStack::Swift->new( |
| 235 |
auth_url => C4::Context->preference('SwiftStorageAuthUrl'), |
| 236 |
user => C4::Context->preference('SwiftStorageUser'), |
| 237 |
password => C4::Context->preference('SwiftStoragePassword'), |
| 238 |
tenant_name => C4::Context->preference('SwiftStorageTenant'), |
| 239 |
region => C4::Context->preference('SwiftStorageRegion') |
| 240 |
); |
| 241 |
my ( $storage_url, $token ); |
| 242 |
eval {($storage_url,$token) = $sw->get_auth();}; |
| 243 |
if ($@){ |
| 244 |
# we can't login, bail out |
| 245 |
$self->{files}->{$filename}->{errcode} = 2; #not writable |
| 246 |
return; |
| 247 |
} |
| 248 |
# get our container, if one doesn't exist, make it |
| 249 |
my $container_name =C4::Context->config( 'database' ); |
| 250 |
my $headers; |
| 251 |
eval {$headers = $sw->header_container(container_name => $container_name);}; |
| 252 |
if ($@){ |
| 253 |
# container doesn't exist |
| 254 |
eval {$headers = $sw->put_container(container_name => $container_name);}; |
| 255 |
if ($@){ |
| 256 |
# cant create a container bail out |
| 257 |
$self->{files}->{$filename}->{errcode} = 2; #not writable |
| 258 |
return; |
| 259 |
} |
| 260 |
} |
| 261 |
# We have a container we can write to, we need to write the file to tmp |
| 262 |
# Then put to the object store (as we buffer read the file) |
| 263 |
$self->{sw} = $sw; |
| 264 |
$self->{temporary} = 1; |
| 265 |
} |
| 266 |
|
| 219 |
if( $self->{files}->{$filename} && |
267 |
if( $self->{files}->{$filename} && |
| 220 |
$self->{files}->{$filename}->{errcode} ) { |
268 |
$self->{files}->{$filename}->{errcode} ) { |
| 221 |
#skip |
269 |
#skip |
|
Lines 271-279
sub _done {
Link Here
|
| 271 |
$self->{done} = 1; |
319 |
$self->{done} = 1; |
| 272 |
foreach my $f ( keys %{ $self->{files} } ) { |
320 |
foreach my $f ( keys %{ $self->{files} } ) { |
| 273 |
my $fh = $self->_fh($f); |
321 |
my $fh = $self->_fh($f); |
| 274 |
$self->_register( $f, $fh? tell( $fh ): undef ) |
322 |
my $size = undef; |
|
|
323 |
if ($fh){ |
| 324 |
$size = tell($fh); |
| 325 |
} |
| 326 |
$self->_register( $f, $size ) |
| 275 |
if !$self->{files}->{$f}->{errcode}; |
327 |
if !$self->{files}->{$f}->{errcode}; |
| 276 |
$fh->close if $fh; |
328 |
$fh->close if $fh; |
|
|
329 |
if ($self->{swift}){ |
| 330 |
my $dir = $self->_dir; |
| 331 |
my $hashval = $self->{files}->{$f}->{hash}; |
| 332 |
my $fn = $hashval. '_'. $f; |
| 333 |
open $fh, '<', "$dir/$fn"; |
| 334 |
# put the file in the object store |
| 335 |
my $headers = $self->{sw}->put_object(container_name => C4::Context->config('database'), |
| 336 |
object_name => $f , content => $fh, content_length => $size); |
| 337 |
close $fh; |
| 338 |
} |
| 277 |
} |
339 |
} |
| 278 |
} |
340 |
} |
| 279 |
|
341 |
|
| 280 |
- |
|
|