开发者社区 问答 正文

关于上传文件后的回调问题

文件上传100%后,就出现400错误了,请问哪里设置有问题呢?
1
2
3

展开
收起
蛮大人123 2016-03-04 16:13:30 3033 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    给你个例子参考:
    1、前端,创建一个index.html

    <form action="upload_file.php" method="post" enctype="multipart/form-data" target="hidden_frame">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="Submit">
    <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
    </form>
    <script type="text/javascript">
    function callback(code,info){   
        console.log(code+info);
    }
    </script>

    2、后端,创建一个upload_file.php

            $url = "/uploads/";  // 存储路径
            $size = 2000000;   // 文件大小
            $allowedExts = array("gif", "jpeg", "jpg", "png","csv");  // 可上传的后缀名
            $temp = explode(".", $_FILES["file"]["name"]);
            $extension = end($temp);
            if ( ($_FILES["file"]["size"] < $size) && in_array($extension, $allowedExts) ){
                if ($_FILES["file"]["error"] > 0){
                    $return =array('code'=> '1','info'=> "Return Code: " . $_FILES["file"]["error"]);
                }
                else{
                    $newfile_url = $url.Date('YmdHis').'_'.$_FILES["file"]["name"];
                    move_uploaded_file($_FILES["file"]["tmp_name"],$newfile_url);
                    $return =array('code'=> '1','info'=> "Stored in: " . $newfile_url);
                }
            }
            else{
                $return =array('code'=> '0','info'=> 'Invalid File');
            }
            echo "<script>parent.callback('".$return['code']."','".$return['info']."')</script>";

    好的我们来一一解析,这里我们看到前端提交是使用了
    target="hidden_frame"
    这个主要是指定hidden_frame对象来提交操作,避免页面刷新;
    后台最后输出一个js脚本:

    echo "<script>parent.callback('".$return['code']."','".$return['info']."')</script>";
    这个主要是反馈回去调前端的一个callback函数:
    <script type="text/javascript">
    function callback(code,info){   
        console.log(code+info);
    }
    </script>

    这样你可以再callback的函数里面写任何东西了,后台也可以传任何东西到前端来。

    2019-07-17 18:52:27
    赞同 展开评论
问答地址: