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';
    }
     ?>

    效果图:

  • 相关阅读:
    弹弹弹,走到哪里弹到哪里 —— 关于上海电信强制弹窗广告
    对Live Writer支持的继续改进:设置随笔地址别名(EntryName)
    【公告】6月20日0:00~1:00(今天夜里)机房网络设备调整
    上周热点回顾(6.46.10)
    [功能改进]Live Writer发博支持“建分类、加标签、写摘要”
    上周热点回顾(6.186.24)
    上周热点回顾(6.116.17)
    [转].NET 绘制 EAN13 (商品条码)
    [转]C#连接操作mysql实例
    [转]MySQLHelper类
  • 原文地址:https://www.cnblogs.com/hltswd/p/5173861.html
Copyright © 2011-2022 走看看