• 文件异步上传方式(一)


    用页面内嵌iframe方式

    表单页:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <title>iframe upload</title>
        </head>
        <body>
            <iframe style="display:none;" src="blank.html" name="upTrans"></iframe>
            <!-- target为本页iframe,异步上传 -->
            <!-- enctype="multipart/form-data" -->
            <!-- method必须为post -->
            <form action="uploadFile.php" target="upTrans" enctype="multipart/form-data" method="POST">
                <input type="file" name="file" id="inputFile"><span class="tip"></span>
                <br>
                <input type="submit" value="确定">
            </form>
            <script type="text/javascript">
                function uploadHandler(data){
                    console.log(data);
                }
            </script>
        </body>
    </html>
    

    上传文件处理uploadFile.php

    <?php
        $filename = "file";
        $result = array(
            "status" => -1,
            "msg" => "",
        );
    
        if($_FILES[$filename]["size"] < 20 * 1024 * 1024){
            if ($_FILES[$filename]["error"] > 0) {
                $result['msg'] = "上传失败。Error: " . $_FILES[$filename]["error"];
                $result['status'] = -1;
            } else {
                if (file_exists("upload/" . $_FILES[$filename]["name"])) {
                    $result['status'] = -1;
                    $result['msg'] = "上传失败,文件已存在";
                } else {
                    // upload 路径为当前php文件的相对路径
                    move_uploaded_file($_FILES[$filename]["tmp_name"], "upload/" . $_FILES[$filename]["name"]);
                    $result['status'] = 1;
                    $result['msg'] = "上传成功";
                }
            }
        } else {
            $result['status'] = -2;
            $result['msg'] = "上传文件超过20M";
        }
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <title>uploadTrans</title>
        </head>
        <body>
            <script type="text/javascript">
                if(window.parent.uploadHandler){
                    window.parent.uploadHandler(<?php echo json_encode($result)?>);
                }
            </script>
        </body>
    </html>
    

    原理:

    1. 设表单target为iframe。即在隐藏的iframe中加载uploadFile.php

    2. uploadFile.php输入内容。有用的就是js部分。调用父页面的全局方法uploadHandler,传入上传结果信息

    注意点:

    1. 表单加属性enctype="multipart/form-data",method必须为post。

    2. 父页面有全局方法uploadHandler,处理php的返回结果

    3. php处理中,将上传的文件从临时文件夹move到另一个有写权限的文件夹中,不然会被清除

    4. 可用$_FILES[$filename]["size"]对上传文件进行大小限制,可用$_FILES[$filename]["type"]对上传文件进行类型过滤

  • 相关阅读:
    js递归遍历
    .NET Core 图片操作在 Linux/Docker 下的坑
    远程桌面连接出现CredSSP的解决方法
    端口被占用解决方案
    当遇到“无法启动 IIS Express Web 服务器。”时的解决方案
    SQL Server索引设计
    python自动化之UI自动化框架搭建四--完成(关键字驱动)
    python自动化之UI自动化框架搭建三(关键字驱动)
    python自动化之UI自动化框架搭建二(关键字驱动)
    python自动化之ui自动化框架搭建一(关键字驱动)
  • 原文地址:https://www.cnblogs.com/frostbelt/p/3423028.html
Copyright © 2020-2023  润新知