ajax利用html5新特性带进度条上传文件 html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  2. <html>  
  3.     <head>  
  4.         <title></title>  
  5.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  6.         <meta name="description" content="" />  
  7.         <meta name="keywords" content="" />  
  8.   
  9.         <script type="text/javascript">  
  10.   
  11. function f1(){  
  12.     var mypic = document.getElementById('myhead').files[0];  
  13.     var fd = new FormData();  
  14.     fd.append("myhead",mypic);  
  15.   
  16.     var xhr = new XMLHttpRequest();  
  17.     xhr.onreadystatechange = function(){  
  18.         if(xhr.readyState==4 && xhr.status==200){  
  19.             alert(xhr.responseText);  
  20.         }  
  21.     }  
  22.   
  23.     //侦查当前附件上传情况  
  24.     xhr.upload.onprogress = function(evt){  
  25.         //侦查附件上传情况  
  26.         //通过事件对象侦查  
  27.         //该匿名函数表达式大概0.05-0.1秒执行一次  
  28.         //console.log(evt);  
  29.         //console.log(evt.loaded);  //已经上传大小情况  
  30.         //evt.total; 附件总大小  
  31.         var loaded = evt.loaded;  
  32.         var tot = evt.total;  
  33.         var per = Math.floor(100*loaded/tot);  //已经上传的百分比  
  34.         var son =  document.getElementById('son');  
  35.         son.innerHTML = per+"%";  
  36.         son.style.width=per+"%";  
  37.     }  
  38.   
  39.     xhr.open("post","./04.php");  
  40.     xhr.send(fd);  
  41. }  
  42.   
  43. //立刻显示被上传的图片  
  44. function f2(){  
  45.     //利用files获得被上传附件(图片)信息  
  46.     var mypic = document.getElementById('myhead').files[0];  
  47.     //利用mypic获得图像的url地址(二进制源码)  
  48.     //URL  html5新标准属性  
  49.     //window.URL.createObjectURL(mypic);  
  50.     document.getElementsByTagName('img')[0].src = window.URL.createObjectURL(mypic);  
  51. }  
  52. </script>  
  53.   
  54. <style type="text/css">  
  55. #parent{width:550px; height:50px; border:5px solid blue;}  
  56. #son {width:0; height:100%; background-color:red; text-align:center; line-height:50px; font-size:20px; font-weight:bold;}  
  57. </style>  
  58. </head>  
  59.   
  60.   
  61. <body>  
  62.     <div id="parent"><div id="son"></div></div>  
  63.     用户头像:<input type="file" id="myhead" name="myhead" onchange="f2()"/><br />  
  64.     <img src="" alt="" width="200" height="150"/><br />  
  65.     <input type="button" value="上传头像" onclick="f1()" /><br />  
  66. </body>  
  67. </html>  

html5的FormData对象和input的file属性以及window.URL.createObjectURL( ) 方法

/**
FormData ==>表单数据
能自动把表单数据拼接打包
当ajax发送数据时,发送打包的数据;
还可以使用FormData对象的append(key,value)添加数据
FormData还可以自动帮忙打包文传送件数据,后台通过$_FILES数组接收

说明FormData对象既可以打包发送表单的数据,也可以手动append数据

注意,input Dom对象有一个files属性  十一哥文件数组
**/
<!doctype html>

<html>
<head>
<meta charset=utf-8>

<head>
<title>FromData</title>
</head>

<script>

window.onload=function(){

    function _ajax(data,url,method){
    
        var xml=new XMLHttpRequest();
        xml.open(method,url,true);

        xml.onreadystatechange=function(){
        
            if(this.readyState==4){
            
                alert(this.responseText);
            }
        }

        xml.send(data);

    }
    function send_form(){
    
        var myform=document.getElementById('myform');
        //这行代码FormData对象帮忙把数据打包了;
        var _formData=new FormData(myform);

        var myImg=document.getElementById('myImg').files[0];
        alert(myImg);
        _formData.append('sex','man');
        _formData.append('like','basketball');
        //直接把_formData对象传给XMLHttpRequest对象的send()方法
        _ajax(_formData,'./accept.php','post')
            
    }

    var btn=document.getElementById('btn');
    btn.onclick=function(){

        send_form();
    }


}
</script>

<body>

<form id='myform'>
    姓名:<input type='text' name='name'/><br/>
    城市:<input type='text' name='city'/><br/>
    密码:<input type='password' name='password'/><br/>
    <input type='file' name='myImg' id='myImg'/><br/>
    <input type='button' value='确认' id='btn'/>
</form>

</body>

</html>

=============================
//后台接收到的数据
Array
(
    [name] => lpprince
    [city] => qingyuan
    [password] => 123
    [sex] => man
    [like] => basketball
)
Array
(
    [myImg1] => Array
        (
            [name] => xiao1.jpg
            [type] => image/jpeg
            [tmp_name] => /Applications/XAMPP/xamppfiles/temp/php0AjbuQ
            [error] => 0
            [size] => 13039
        )

    [myImg2] => Array
        (
            [name] => xiao.c
            [type] => application/octet-stream
            [tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpMprmQq
            [error] => 0
            [size] => 49
        )

)
复制代码

input的file属性以及window.URL.createObjectURL(  ) 方法

复制代码
<!doctype html>

<html>
<head>
<meta charset=utf-8>

<head>
<title>FromData</title>
</head>

<script>

window.onload=function(){

    var btn=document.getElementById('btn');

    var file_msg=document.getElementById('file_msg');

    var input=document.getElementById('myImg')

    input.onchange=function(){

        
        /*
        input 有files属性,该属性是一个数组,保存了图片的信息
        name=>L.png
        lastModifiedDate=>Mon Nov 11 2013 13:38:31 GMT+0800 (CST)
        size=>54546
        type=>image/png
        webkitSlice=>function webkitSlice() { [native code] }
        */
        var myImg=document.getElementById('myImg').files[0];

        var pic=document.createElement('img');

        //把二进制对象读成浏览器能够识别的对象;
        //Safari竟然不支持URL.createObjectURL()方法,Chrome支持
        pic.src=window.URL.createObjectURL(myImg);
        pic.style.width='100px';
        pic.style.height='100px';

        file_msg.innerHTML="文件的大小是"+parseInt(myImg.size)+'M'+'<br/>'+'图片的名字是:'+myImg.name;
        document.body.appendChild(pic);
        

    }


}
</script>

<style>

#file_msg{
    width:150px;
    height:150px;
    border:1px solid green;
}
</style>
<body>

<form id='myform'>
    <div id='file_msg'></div>
    <input type='file' name='myImg1' id='myImg'/><br/>

    <input type='button' value='确认' id='btn'/>
</form>

</body>

</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值