zoukankan      html  css  js  c++  java
  • 文件异步上传方式(一)

    用页面内嵌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"]对上传文件进行类型过滤

  • 相关阅读:
    Visual C# 插件构架实战
    用CSS实现表格单元格数据自动换行或不换行
    页面代码开发规范:CSS命名规范(参考)
    UML之业务建模
    在.NET环境下将报表导出Excel和Word(网络转载)
    asp.net数据导出到Excel (从网络摘操)
    ASP.NET(VB)把数据导出到EXCEL的一种方法(网上转载)
    关于ASP,ASP.NET,VB.NET里的MD5加密函数(转载)
    .net打包自动安装数据库(转载)
    Cannot load required extension: curl
  • 原文地址:https://www.cnblogs.com/frostbelt/p/3423028.html
Copyright © 2011-2022 走看看