【发布时间】:2019-12-04 09:45:27
【问题描述】:
我需要在另一个 cgi 脚本中使用表单数据,其中另一个表单也存在。基本上我需要从以前的表单数据创建一个文件名,并且需要重命名以另一个表单上传的文件。
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw( fatalsToBrowser );
use File::Basename;
use Exporter qw(import);
our @EXPORT = qw(copyToTarget);
$newfilename='';
sub xyz()
{
local ($buffer, @pairs, $pair, $name, $value, %FORM);
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else
{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
$Circle = $FORM{Circle};
$Techno = $FORM{Techno};
$newfilename = $Circle.'_'.$Techno.'.csv';
#print ("Content-type: text/html\n\n");
#print "$newfilename";
}
sub print_page()
{
xyz();
print ("Content-type: text/html\n\n");
print <<__HTML__;
<form style="margin:20px 0" action="Maintenance_Framework.cgi" method="post" enctype="multipart/form-data">
<p>
<h3 align='center'> Maintenance File Upload </h3>
<p>File to Upload: <input type="file" name="filecsv" /></p>
<p><input type="submit" name="Submit" value="Upload" >   
<input type="button" value="Cancel" onClick="javascript:window.close();">
</body>
</html>
</form>
__HTML__
}
sub main()
{
$CGI::POST_MAX = 1024 * 5000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $upload_dir = "/opt/IBM/Maintenance/tmp";
my $query = new CGI;
print_page();
my $filename = $query->param("filecsv");
#my $ctext = $query->param("Circle");
if ( !$filename )
{
exit;
}
my ( $name, $path, $extension ) = fileparse ( $filename, '.csv' );
$filename = $name . $extension;
$filename =~ tr/ /_/;
$filename =~ s/[^$safe_filename_characters]//g;
if ( $filename =~ /^([$safe_filename_characters]+)$/ )
{
$filename = $1;
}
else
{
die "Filename contains invalid characters";
}
my $upload_filehandle = $query->upload("filecsv");
open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
`mv /opt/IBM/Maintenance/tmp/*.csv /opt/IBM/Maintenance/tmp/$newfilename.csv`;
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Thanks!</title>
<style type="text/css">
img {border: none;}
</style>
</head>
<body>
<p>Thanks for uploading your file!</p>
</body>
</html>
END_HTML
}
#xyz();
main();
例如:如果 Circle 包含 Gabon,Techno 包含 RAN,并且用户上传文件 xyz.csv,则应将其重命名为 Gabon_RAN.csv
【问题讨论】: