Ignore:
Timestamp:
2023-01-30T15:23:43+13:00 (16 months ago)
Author:
davidb
Message:

set-archives-assocfile can now pass data directly using 'filedata' (rather than a full-blown POST with file-update). This argument will be more conventient for transmitted CSV and JSON data interactively created within the browser

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/perllib/cgiactions/modmetadataaction.pm

    r37215 r37218  
    7171
    7272    "set-archives-assocfile" => {
    73         'compulsory-args' => [ "d", "assocname", 'fileupload' ],
    74         'optional-args'   => [ "dv" ] ,
     73        'compulsory-args' => [ "d", "assocname" ],
     74        'optional-args'   => [ "dv", "fileupload", "filedata" ] ,
    7575        'help-string'     => [ "Because this action uploads a file, this action needs to be POSTed. The 'fileupload' parameter/field is the uploaded file content; 'assocname' specifies the filename within the archives's document's area that it will be saved as" ]
    7676    },
     
    13721372   
    13731373    my $output_filename = &util::filename_cat($archive_dir, $output_file);
    1374    
     1374
     1375    my $filedata = $self->{'filedata'};
    13751376    my $FIN = $self->{'fileupload'};
    1376     if (open(FOUT,">$output_filename")) {
    1377 
    1378     binmode(FOUT, ":raw");
    1379 
    1380     while (1) {
    1381         my $buffer = "";
    1382         my $bytes_read = read($FIN, $buffer, 1024);
    1383 
    1384         if (defined $bytes_read) {
    1385         if ($bytes_read>0) {
    1386             print FOUT $buffer;
    1387         }
    1388         last if $bytes_read < 1024;
     1377   
     1378    if ((!defined $filedata) && (!defined $FIN)) {
     1379    $gsdl_cgi->generate_ok_message("set-archives-assocfile: either 'fileupload' or 'filedata' must be set");
     1380    }
     1381    else {
     1382
     1383    my $had_error = 0;
     1384    my $had_error_mess = undef;
     1385   
     1386    if (defined $filedata) {
     1387        if (open(FOUT,">$output_filename")) {       
     1388        print FOUT $filedata;
     1389        close(FOUT);   
    13891390        }
    13901391        else {
    1391         my $mess = "set-archives-assocfile: Failed to open uploaded file for reading: $!\n";
    1392         print STDERR "Error - $mess";
    1393         $gsdl_cgi->generate_error($mess);
    1394         last;
     1392        $had_error = 1;
     1393        $had_error_mess = "Failed to save filedata to: $output_filename";
     1394        print STDERR "Error - $had_error_mess:\n$!\n";
    13951395        }
    13961396    }
    1397 
    1398     close($FIN);   
    1399     close(FOUT);   
    1400 
    1401     my $mess = "set-archives-assocfile successful save uploaded content into 'archives' as: $output_file\n";
    1402     $gsdl_cgi->generate_ok_message($mess);
    1403 
    1404     }
    1405     else {
    1406     my $mess = "Failed to save file: $output_filename";
    1407     print STDERR "Error - $mess:\n$!\n";
    1408     $gsdl_cgi->generate_error($mess);
    1409     }       
     1397    else {
     1398        my $FIN = $self->{'fileupload'};
     1399        if (open(FOUT,">$output_filename")) {       
     1400        binmode(FOUT, ":raw");
     1401       
     1402        while (1) {
     1403            my $buffer = "";
     1404            my $bytes_read = read($FIN, $buffer, 1024);
     1405           
     1406            if (defined $bytes_read) {
     1407            if ($bytes_read>0) {
     1408                print FOUT $buffer;
     1409            }
     1410            last if $bytes_read < 1024;
     1411            }
     1412            else {
     1413            $had_error = 1;
     1414            $had_error_mess = "set-archives-assocfile: Failed to open uploaded file for reading: $!\n";
     1415            print STDERR "Error - $had_error_mess";
     1416            last;
     1417            }
     1418        }
     1419       
     1420        close($FIN);   
     1421        close(FOUT);   
     1422        }
     1423        else {
     1424        $had_error = 1;
     1425        $had_error_mess = "Failed to save file uploaded file as: $output_filename";
     1426        print STDERR "Error - $had_error_mess:\n$!\n";
     1427        }
     1428    }
     1429
     1430    if (!$had_error) {
     1431        my $mess = "set-archives-assocfile successful save uploaded content into 'archives' as: $output_file\n";
     1432        $gsdl_cgi->generate_ok_message($mess);
     1433    }
     1434    else {
     1435        $gsdl_cgi->generate_error($had_error_mess);
     1436    }
     1437    }
    14101438}
    14111439
Note: See TracChangeset for help on using the changeset viewer.