我正在尝试简单上传 .csv 文件并将其保存在我的服务器上。我不是 HTML 或 Perl 方面的专家,但由于客户端限制,这是我必须做的。
这是HTML:
<form action="/path/to/service" target="_self" method="POST" enctype="multipart/form-data">
File: <input type="file" name="attachment" size="50">
<SUBMIT_RESET Upload File>
</form>
Perl 代码如下所示:
my $sql = "SELECT NOW()";
my $date = $DB->get_field($sql);
my ($path, $ext) = split(/\./, $in{'attachment'});
my @pathParts = split(/\//, $path);
my $filename = $pathParts[@pathParts - 1] . " - " . $date;
if ($ext eq "csv") {
open (OUTFILE, ">", "$datadir/imports/" . $filename . "." . $ext);
while (read($in{'attachment'}, $buffer, 1024)) {
$file .= $buffer;
}
print OUTPUT $file;
close (OUTFILE);
}
谁能给我一些关于我做错了什么的指导。我得到位于正确路径的文件,但它总是空的。
现在,我在这里处理的代码库很糟糕,我不能使用严格的。
建议?
EDIT1:为了尝试回答 $in{'attachment'} 的填充方式,我提供了一段有关如何处理表单的代码。
if ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) {
my $cgi = new CGI; 我的@names = $cgi->param;
foreach $name (@names) {
my @value = $cgi->param($name);
if (scalar(@value) > 1) {
foreach $val (@value) {
$in{$name} .= $val."\0";
}
$in{$name} =~s/\\0$//;
} else {
my $value = $cgi->param($name);
#my $value = join "\0", @value;
$in{$name} = $value;
}
#my $value = $cgi->param($name);
#my $value = join "\0", @value;
#$in{$name} = $value;
}
编辑2:
总结一下ikegami提供的解决方案...
我错过了 read 和 print 语句的文件句柄不同 -OUTFILE
和OUTPUT
. 显然,这完全是一个新手错误,为此我深表歉意!
向所有试图帮助我的人致以最良好的祝愿。