source: trunk/gsdl/cgi-bin/upload@ 9470

Last change on this file since 9470 was 9388, checked in by mdewsnip, 19 years ago

Improvements to upload, by Matthew Whyte.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.6 KB
Line 
1#!/usr/bin/perl -w
2
3use gsdlCGI;
4
5sub main
6{
7
8 my $gsdl_cgi = new gsdlCGI();
9 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome");
10
11 my $col = $gsdl_cgi->clean_param("c");
12 if ((!defined $col) || ($col =~ m/^\s*$/)) {
13 $gsdl_cgi->generate_error("No collection name specified");
14 }
15
16 #If the collection dir on the server somehow got erased, create it.
17 if(!-e "$gsdlhome/collect/$col") {
18 `mkdir $gsdlhome/collect/$col`;
19 }
20
21 my $dir = $gsdl_cgi->clean_param("dir");
22 if ((!defined $dir) || ($dir =~ m/^\s*$/)) {
23 $gsdl_cgi->generate_error("No directory name specified");
24 }
25
26 my $delete = $gsdl_cgi->clean_param("del");
27 $delete = "all" if((!defined $delete) || ($delete eq ""));
28
29 $dir = "" if (($dir eq ".") || ($dir =~ m/^\.\./));
30
31 my $zip_content = $gsdl_cgi->clean_param("zip");
32 my $zip_fname = "$col.zip";
33
34 if ($col =~ m/^\//) {
35 # leading / at start denotes special "cols" such as "/tmp"
36 $gsdl_cgi->checked_chdir("$gsdlhome");
37 $col =~ s/^\///;
38 }
39 else {
40 $gsdl_cgi->checked_chdir("$gsdlhome/collect");
41 }
42
43 my $col_dir = "$col/$dir"; # Unix specific
44
45# if($delete eq "all") {
46# $gsdl_cgi->rm_rf($col_dir);
47# }
48# elsif($delete eq "files") {
49# `java -classpath $gsdlhome/bin/java/SignedGatherer.jar org.greenstone.gatherer.util.Delete $gsdlhome/collect/$col_dir -reject "metadata\\.xml"`;
50# }
51# elsif($delete eq "metadata") {
52# `java -classpath $gsdlhome/bin/java/SignedGatherer.jar org.greenstone.gatherer.util.Delete $gsdlhome/collect/$col_dir -accept "metadata\\.xml"`;
53# }
54
55 if($delete eq "all") {
56 $gsdl_cgi->rm_rf($col_dir);
57 }
58 elsif($delete eq "files") {
59 `cd $gsdlhome/collect/$col_dir; find -not -name "metadata.xml" -exec rm {} \\;`;
60 }
61 elsif($delete eq "metadata") {
62 `cd $gsdlhome/collect/$col_dir; find -name "metadata.xml" -exec rm {} \\;`;
63 }
64
65 if (!-e $col_dir) {
66 my $mkdir_cmd = "mkdir $col_dir";
67 $gsdl_cgi->unix_cmd($mkdir_cmd);
68 }
69
70 if (open(ZOUT,"> $zip_fname")) {
71
72 my $ZIN = $gsdl_cgi->upload('zip');
73 binmode($ZIN);
74
75 my $buf;
76 my $num_bytes = 0;
77
78 while (read($ZIN,$buf,1024)>0) {
79 print ZOUT $buf;
80 $num_bytes += length($buf);
81 }
82
83 close($ZIN);
84 close(ZOUT);
85
86 #print STDERR "**** Debug as /tmp/$dir.zip\n";
87 #`cp $zip_fname /tmp/mgw5/$dir.zip`;
88
89 `java -classpath $gsdlhome/bin/java/SignedGatherer.jar org.greenstone.gatherer.util.Unzip $gsdlhome/ $zip_fname`;
90
91 unlink "$zip_fname";
92
93 $gsdl_cgi->generate_ok_message("$dir or $col uploaded successfully.");
94 }
95 else {
96 $gsdl_cgi->generate_error("unable to open $zip_fname");
97 }
98}
99
100&main();
Note: See TracBrowser for help on using the repository browser.