html5 文件上传预览

<form action= "upload.php" method= "post" enctype= "multipart/form-data" >
UPLOAD USER-ICON:<input name= "icon" id= "icon" type= "file" placeholder= "请上传PNG格式的图像(大小在1M之内)" /><br/>
<input type= "submit" value= "上传" />
</form>
 
<section id= "main-content" >
                 
                 <h2>文件上传(可预览)</h2>
                 <p>
浏览和上传多个文件在一个去按住Ctrl(Windows、Linux)或命令(Mac)当点击他们的文件对话框,或拖放文件。上传文件的信息将是下面列出的。注意:Safari似乎无法读出任何信息关于实际的文件                </p>
                 
                 <h3>选择图片(>=1)</h3>
                 <p>
                     <input id= "files-upload" type= "file"  multiple= "multiple" />
                     <!-- multiple= "multiple" -->
                 </p>
                 <p id= "drop-area" >
                     <span class = "drop-instructions" >投放文件到这里</span>
                     <span class = "drop-over" >拖动文件到此处!</span>
                 </p>
                 
                 <ul id= "file-list" >
                     <li class = "no-items" >(没有上传文件)</li>
                 </ul>
                 <script>
                     ( function () {
                         var filesUpload = document.getElementById( "files-upload" ),
                             dropArea = document.getElementById( "drop-area" ),
                             fileList = document.getElementById( "file-list" );
                             
                         function uploadFile (file) {
                             var li = document.createElement( "li" ),
                                 div = document.createElement( "div" ),
                                 img,
                                 progressBarContainer = document.createElement( "div" ),
                                 progressBar = document.createElement( "div" ),
                                 reader,
                                 xhr,
                                 fileInfo;
                                 
                             li.appendChild(div);
                             
                             progressBarContainer.className = "progress-bar-container" ;
                             progressBar.className = "progress-bar" ;
                             progressBarContainer.appendChild(progressBar);
                             li.appendChild(progressBarContainer);
                             
                             /*
                                 If the file is an image and the web browser supports FileReader,
                                 present a preview in the file list
                             */
                             if ( typeof FileReader !== "undefined" && (/image/i).test(file.type)) {
                                 img = document.createElement( "img" );
                                 li.appendChild(img);
                                 reader = new FileReader();
                                 reader.onload = ( function (theImg) {
                                     return function (evt) {
                                         theImg.src = evt.target.result;
                                     };
                                 }(img));
                                 reader.readAsDataURL(file);
                             }
                             
                             // Uploading - for Firefox, Google Chrome and Safari
                             xhr = new XMLHttpRequest();
                             
                             // Update progress bar
                             xhr.upload.addEventListener( "progress" , function (evt) {
                                 if (evt.lengthComputable) {
                                     progressBar.style.width = (evt.loaded / evt.total) * 100 + "%" ;
                                 }
                                 else {
                                     // No data to calculate on
                                 }
                             }, false );
                             
                             // File uploaded
                             xhr.addEventListener( "load" , function () {
                                 progressBarContainer.className += " uploaded" ;
                                 progressBar.innerHTML = "Uploaded!" ;
                             }, false );
                             
                             xhr.open( "post" , "upload/upload.php" , true );
                             
                             // Set appropriate headers
                             xhr.setRequestHeader( "Content-Type" , "multipart/form-data" );
                             xhr.setRequestHeader( "X-File-Name" , file.name);
                             xhr.setRequestHeader( "X-File-Size" , file.size);
                             xhr.setRequestHeader( "X-File-Type" , file.type);
 
                             // Send the file (doh)
                             xhr.send(file);
                             
                             // Present file info and append it to the list of files
                             fileInfo = "<div><strong>Name:</strong> " + file.name + "</div>" ;
                             fileInfo += "<div><strong>Size:</strong> " + parseInt(file.size / 1024, 10) + " kb</div>" ;
                             fileInfo += "<div><strong>Type:</strong> " + file.type + "</div>" ;
                             div.innerHTML = fileInfo;
                             
                             fileList.appendChild(li);
                         }
                         
                         function traverseFiles (files) {
                             if ( typeof files !== "undefined" ) {
                                 for ( var i=0, l=files.length; i<l; i++) {
                                     uploadFile(files[i]);
                                 }
                             }
                             else {
                                 fileList.innerHTML = "No support for the File API in this web browser" ;
                             }  
                         }
                         
                         filesUpload.addEventListener( "change" , function () {
                             traverseFiles( this .files);
                         }, false );
                         
                         dropArea.addEventListener( "dragleave" , function (evt) {
                             var target = evt.target;
                             
                             if (target && target === dropArea) {
                                 this .className = "" ;
                             }
                             evt.preventDefault();
                             evt.stopPropagation();
                         }, false );
                         
                         dropArea.addEventListener( "dragenter" , function (evt) {
                             this .className = "over" ;
                             evt.preventDefault();
                             evt.stopPropagation();
                         }, false );
                         
                         dropArea.addEventListener( "dragover" , function (evt) {
                             evt.preventDefault();
                             evt.stopPropagation();
                         }, false );
                         
                         dropArea.addEventListener( "drop" , function (evt) {
                             traverseFiles(evt.dataTransfer.files);
                             this .className = "" ;
                             evt.preventDefault();
                             evt.stopPropagation();
                         }, false );                                     
                     })();
                 </script>
                 
             </section>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值