我正在使用以下CodeIgniter函数上传工作正常的文件:
function uploadFiles(){
$this->load->library('upload');
$error = 0;
$projectName = $_POST['projectname'];
$projectID = $_POST['maxid'];
$folderName = $this->config->item('upload_dest')."/".$projectName."_".$projectID;
if(!file_exists ($folderName)){
$aa = mkdir($folderName);
}
$config['upload_path'] = $folderName;
$config['allowed_types'] = 'xml';
//$config['allowed_types'] = '*';
$config['max_size'] = '0';
$config['overwrite'] = TRUE;
$this->upload->initialize($config);
for($i=0; $i<count($_FILES['files']['name']); $i++)
{
$_FILES['userfile']['name'] = $_FILES['files']['name'][$i];
$_FILES['userfile']['type'] = $_FILES['files']['type'][$i];
$_FILES['userfile']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
$_FILES['userfile']['error'] = $_FILES['files']['error'][$i];
$_FILES['userfile']['size'] = $_FILES['files']['size'][$i];
if($this->upload->do_upload())
{
$error += 0;
}else{
$error += 1;
}
}
if($error > 0){
$this->upload->display_errors();
return FALSE;
}
else{
return TRUE;
}
}
我需要做的是 - 检查以确保至少有一个正在上传的文件名为“etl”。如果用户选择的文件列表中没有这样的文件 - 停止操作,不上传任何内容并返回表单验证错误。有人可以就此提出建议吗?
感谢。
答案 0 :(得分:1)
首先,从php上传之前无法获取文件的名称,必须上传才能获取文件的属性。因此,可用的选项是:
(1)允许上传文件,然后获取名称并检查是否包含“etl”。如果non包含您要查找的内容,则删除刚刚上传的文件,并自行设置自定义错误消息。 这种方法具有非常大的开销成本,允许您首先上载不需要的内容,然后删除它。非常差但解决了这个问题。
(2)另一方面,是javascript解决方案。为上载字段指定一个公共类名 例如“userfile1”,“userfile2”,.......
然后从你的javascript和使用jquery,拦截表单的提交,然后使用for循环来获取每个文件上传字段的值,从中可以获得文件的全名和扩展名然后做你的“etl”比较。
即
<script type="text/javascript" >
$("#formname").submit(function(){
$(".classname").each(function(){
if($(this).val().indexOf("etl") != -1 ){
return true;
}
});
/*
*whatever makes it finish executing that loop and the execution of code gets
*to this point, then the string "etl" was not found in any of the names.
*/
// write a piece of code to show an hidden error field
$("#hidden_error_div").text("Your error message").show();
return false; //makes sure the form is not submitted.
});
</script>
希望这有帮助。
答案 1 :(得分:0)
Oyekunmi在实际到达服务器之前提供了一个很好的javascript解决方案来拦截。正如Oyekunmi指出的那样,一旦它到达那里,它就会作为一个包存在,所以你可以在一个临时目录中存储和处理它,在那里评估每个文件并进行相应的处理。