我有一个表单,允许用户输入文本并上传至少一个文件,文件大小小于1GB。当点击表单的"提交"按钮时,该需求将通过javascript进行验证。但是,当我添加文件验证时,它没有任何显示文件名称和大小的响应,尤其是当文件超过1GB时。
以下哪种方法更好?
- 选择文件后请检查文件大小,如果文件大小超过1GB,则会出现警告,告诉用户文件太大,需要重新选择
- 选择文件后,单击"提交"按钮,在继续使用PHP将文件上传到服务器之前,整个表单的验证,包括输入文本字段和文件大小,都是用JavaScript完成的
这是我的表格:
<script type="text/javascript" src="validate.js"></script>
<form id="fileUpload" method="post" action="upload_action.php">
<p>Text input: <input type="text" name="text_input" value=""/></p>
<p>File upload: <input type="file" name="upload_file[]" multiple/></p>
<input type="submit" value="Submit" onclick="return validate_form();"/>
</form>
以及我的验证JavaScript(validate.js
):
function validate_form() {
var valid=true;
if (document.forms['fileUpload']['text_input'].value=='') {
alert('You have to enter text');
valid=false;
}
// File size validation goes here
}
香港时间下午12:20编辑:
现在可以按如下方式检查文件的大小:
在PHP文件中:
<form id="fileUpload" method="post" action="upload_action.php">
<p>Text input: <input type="text" name="text_input" value=""/></p>
<p>File upload: <input type="file" id="upload_file" name="upload_file[]" multiple="true"></p>
<input type="submit" value="Submit" onclick="return validate_form();"/>
</form>
在javascript 中
var MAX_SIZE = 1073741824;
var x=document.getElementById("upload_file");
for(var i=0; i<x.files.length; i++)
{
if (x.files[i].size > MAX_SIZE) {
alert('The file "'+x.files[i].name+'" has exceeded the max file size, 1GB. Please choose smaller file.');
valid=false;
return false;
}
}
但我不得不面对另一个问题:当我从文件对话框中选择文件时,我只看到"选择"按钮附近的单词"2个文件",而不是所选文件的名称。那么,我该怎么做才能显示所选文件的名称呢?再次感谢!
man。我在文件输入更改后进行投票,因此用户有机会立即更正。
如果我理解正确,你可以在一个变化事件中做这样的事情:
var MAX = 1000000000;
if (document.forms['fileUpload']['text_input'].files[0].size > MAX) {
valid = false;
alert('you have exceeded the max file size, 1GB. Please choose smaller file.');
return false; // no submit
}
希望能有所帮助。
由于您的文件选择是多种类型的,您需要迭代文件数组并检查每个文件的大小
function validate_form(){
var MAX_SIZE = 1000000000;
var myForm=document.forms['fileUpload']
//other field validations
for(var file in myForm['upload_file[]'].files)
if (file.size > MAX) {
alert('you have exceeded the max file size, 1GB. Please choose smaller file.');
return false;
}
}
}