我正在尝试拥有一个文件上传页面,允许任意数量的文件上传。我发现javascript代码在单击一个时在表单中成功创建了一个新的文件输入字段,但是,除了在html中硬编码的字段之外的任何字段都没有被发送到我的perl CGI脚本。
的Javascript
function fileFields() {
var x = document.getElementById('fileUpload');
x.onclick = function() {
var i = parseFloat(this.lastChild.id)+1;
input = document.createElement("input");
input.setAttribute("type", "file");
input.setAttribute("name", 'fileName_' + i);
input.setAttribute("id", i);
this.appendChild(input);
}
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
fileFields();
});
HTML表单
<form action="https://www.indiana.edu/~webdeviu/phil/submit.cgi" method="post" enctype="multipart/form-data">
<select name="property">
<TMPL_LOOP NAME="PROPS">
<option value="<TMPL_VAR NAME="user">"><TMPL_VAR NAME="user"></option>
</TMPL_LOOP>
</select>
<br />
<a href="#" id="fileUpload"><input type="file" name="file_1" id="1" /></a>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
Perl CGI,寻找多个文件的部分
my @files;
my $i = 1;
my $file = $query->param("file_" . $i);
while ($file) {
push(@files, $file);
$i = $i + 1;
$file = $query->param("file_" . $i);
}
print $query->header( );
print scalar(@files); # prints 1 regardless of how many files I upload
exit;
我还在while循环中放置一个转义,一旦将$ file更改为“file_2”就打印出$ file,此时它为null。
我错过了什么?任何帮助深表感谢。
答案 0 :(得分:2)
您错误地命名了动态文件字段:
input.setAttribute("name", 'fileName_' + i);
根据你的CGI,这应该是这个:
input.setAttribute("name", 'file_' + i);
答案 1 :(得分:1)
尝试使用firebug进行调试。查看实际发送的内容以及HTML表单的实时构建方式。