php中上传文件时用<input type="file" name="file" value="上传文件" />标签,然后当表单提交之后可以在后台用$_FILES['file']获取到上传文件的信息,但是上传文件大小不得超过1M,超过1M就要提示信息到前台页面,并且不能提交页面数据,还要保留页面其它数据不丢失。这个验证该怎么做才好呢?我之前是在表单提交后执行表单action中的方法中验证的,但是当上传文件大小大于1M时,提示用户,并返回原页面,而返回之后页面已经过期,之前的数据都丢失了。后来我又想在前台能不能ajax请求去解决这个页面跳转问题,但是在写ajax的时候发现在ajax的url方法中获取不到$_FILES['file']。所以请高手指点如何取得上传文件信息,或者有什么其他更好的验证方法?

解决方案 »

  1.   

    我本人的意见哈,仅供参考,你可以写一个js文件,文件其他信息可以进行简单的检测,同时在js里利用ajax进行异步请求检测,你可以试一下看看行不行。
      

  2.   

    Ajax Upload
    试试这个吧,很不错的,只是要求浏览器支持javascrip才能用
    http://valums.com/ajax-upload/
      

  3.   

    用iframe吧,将表单的 target="隐藏的iframe"
      

  4.   


    我用了iframe,挺好的,非常感谢!
      

  5.   

    在此分享一下,希望对和我遇到类似问题的同学有所帮助!前台页面代码:<form id="form_send" method="post" action='<{link ctl='filemanager' act='upload_file' }>' enctype="multipart/form-data">
        <input id="upload_file" type="file" name="file" value="上传文件" onchange="check_uploadFile();" />(不超过10M)
        <font id="upload_remind" color="red"></font>
    </form><form id="upload" method="post" action="index.php?ctl=filemanager&act=checkUploadFile" encType="multipart/form-data" target="file_frame" style="display:none">
    </form>
    <iframe name='file_frame' id="file_frame" style="display:none"></iframe>第一步:前台js代码:    //在更换上传文件时执行
        function check_uploadFile(){
            var newForm = $('upload');
            newForm.empty();//每次更换上传文件都会执行check_uploadFile方法,所以每次都会复制一个"file"控件添加到第二个form表单中,故每次在复制前将第二个form表单中的元素清空。
            var newfile = $('upload_file').clone(true);//复制第一个表单中的"file"控件。
            newForm.adopt(newfile);//将复制的控件添加到第二个form表单中。        $('upload').submit();//提交第二个表单,因为在后台获取$_FILES的值需要提交表单
        }第二步:后台checkUploadFile()方法代码    function checkUploadFile(){
            if($_FILES['file']['error'] > 0){
                echo '<script language="javascript">parent.cus_callback(0)</script>';
            }else{
                if($_FILES['file']['size'] > 10485760){
                    echo '<script language="javascript">parent.cus_callback(0)</script>';
                }else{
                    echo '<script language="javascript">parent.cus_callback(1)</script>';
                }
            }
        }注:方法中看到输出一段js,并且js中执行parent.cus_callback()方法,这个方法指的是前台iframe(内嵌框架)的父类中的cus_callback方法。所以我们现在回到前台写cus_callback()方法。第三步:前台cus_callback()方法代码    function cus_callback(rs){
            if(!rs){
              $('upload_remind').innerHTML = '文件大小不能大于10M!';
            }else{
              $('upload_remind').innerHTML = '';
            }
        }注:以上全部是个人理解,如有错误敬请指正,互相学习,互相进步,谢谢!