zoukankan      html  css  js  c++  java
  • ajax实现无刷新上传附件并且显示进度条的实例

    首先:得把php.ini中的post_max_size和upload_max_filesize改成200M或更大(进度条好看效果,默认是2M)

    html和js代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script>
            window.onload=function(){
                var fm=document.getElementsByTagName('form')[0];
                fm.onsubmit=function(evt){//表单事件
                    var fd=new FormData(fm);//接受表单数据
                    var xhr=new XMLHttpRequest();
                    xhr.upload.onprogress=function(evt){//onprogress事件每0.1秒感应一次
                        //console.log(evt);
                        var loaded=evt.loaded;//已经上传的附件大小
                        var total=evt.total;//附件的总大小
                        var per=Math.floor((loaded/total)*100)+'%';
                        document.getElementById('son').style.width=per;
                        document.getElementById('son').innerHTML=per;
                    }
                    xhr.onreadystatechange=function(){//ajax返回状态
                        if (xhr.readyState==4) {
                            alert(xhr.responseText);
                        }
                    }
                    xhr.open('post','upload.php');//发送ajax方式和路径
                    xhr.send(fd);//发生表单数据
                    evt.preventDefault();//阻止浏览器跳转
                }
            }
        </script>
        <style>
            #pat{
                width:400px;
                height:5px;
                border:1px solid blue;
            }
            #son{
                width:0;
                height:100%;
                background-color:yellow;
            }
        </style>
    </head>
    <body>
        <form action="upload.php" >
            用户名:<input type="text" name='username'><br>
            <input type="file" name='file'><br>
            <input type="submit" value='提交'>
            <br><br>
            <div id='pat'><div id='son'></div></div>
    </body>
    </html>

    php代码:

    <?php 
    if ($_FILES['file']['error']>0) {
        exit('上传异常');
    }
    $path='./upload/';
    $name=mt_rand('000','999').$_FILES['file']['name'];//在名字前加上三位随机数,这样能多次上传同一文件
    $truename=$path.$name;
    $truename=iconv('UTF-8','gb2312',$truename);//转码,使得能够上传中文名称附件
    if (move_uploaded_file($_FILES['file']['tmp_name'],$truename)) {//$_FILES['file']['tmp_name']为临时存放目录
        echo 'upload success';
    }else{
        echo 'upload error';
    }
     ?>

    效果图:

  • 相关阅读:
    数组中出现次数超过一半的数字
    Trie字典树算法
    字符串匹配算法 之 基于DFA(确定性有限自动机)
    实现栈最小元素的min函数
    有关有环链表的问题
    浅谈C中的malloc和free
    undefined reference to 'pthread_create'问题解决
    用两个栈实现队列
    resf规范
    单例模式
  • 原文地址:https://www.cnblogs.com/hltswd/p/5173861.html
Copyright © 2011-2022 走看看