php文件上传验证和错误显示

时间:2012-09-04 04:09:02

标签: php javascript jquery

我有一个表单,其中一个输入作为文件上传。我有一个PHP脚本,我用jquery ajax调用以验证其他表单字段并在表单上方的div中显示错误消息。它使用.html()jquery函数,基于与以下脚本非常相似的php echo。

我还创建了一个PHP脚本来验证文件上传,如下所示:

<?php

    $errorList = array();
    $inc = 0;


    $allowedExt = array("jpg", "jpeg", "gif", "png");
    $fileExt = end(explode(".", $_FILES['imgUpload']['name']));
    if((($_FILES['imgUpload']['type'] == 'image/gif')
     || ($_FILES['imgUpload']['type'] == 'image/pnjpeg')
     || ($_FILES['imgUpload']['type'] == 'image/jpeg'))
     && ($_FILES['imgUpload']['size'] < 2000000)
     && in_array($fileExt, $allowedExt)){
    if($_FILES['imgUpload']['error'] > 0)){

        $errorList[$inc++] = '<span class="error"> File error:'. $_FILES['imgUpload']['error'].'</span>';
    }

    }
    else{
    $errorList[$inc++] = '<span class="error"> Invalid file </span>';

    }

    echo '<ul class="errorList">';
    for($i =0; $i<$inc; $i++){
        echo $errorList[$i];

    }
    echo '</ul>';


?>

我希望此脚本中的错误消息以与其他类似的方式显示,但正如我所读,文件上传不能使用ajax完成。

有人对我如何解决这个问题有任何建议吗?

1 个答案:

答案 0 :(得分:0)

Ajax无法上传文件。但您可以使用IFrame使其看起来像Ajax。

您的选择是:

  • 隐藏的iframe技巧,由Google推广。自己实现这个可能会产生一些笨重的东西,所以有一些库,比如jQuery,它们有插件,比如jQuery的流行Form Plugin,它可以实现自动化,所以你不必感到内心的肮脏使用时。
  • 使用Flash来促进流程。最值得注意的是SWFUpload非常受欢迎。在所有条件相同的情况下,我可能会使用Javascript解决方案,但过去我已经成功使用了这个解决方案。这个解决方案很酷的是它带有一个更好的界面,如加载指示器和缩略图等。但是,此时,您要求用户提供Flash + Javascript,这在某些情况下可能无效。
  • 使用Silverlight代替Flash,虽然我不认为这是一个可行的解决方案,因为它的渗透率远低于其他两个解决方案。

如果您有帮助,请参阅此示例

http://www.anyexample.com/programming/php/php_ajax_example__asynchronous_file_upload.xml

正在使用iframe选项