示例:使用PHP实现大文件分片上传并显示进度条功能
PHP大文件分片上传并带进度条功能示例可以通过以下步骤实现: 1. 创建一个HTML表单,用于选择文件和显示进度条。 2. 使用PHP的`$_FILES`全局变量获取上传的文件信息。 3. 计算文件的总大小和每个分片的大小。 4. 使用循环将文件分成多个分片,并将每个分片上传到服务器。 5. 在每次上传后,更新进度条的值。 6. 当所有分片都上传完成后,将它们合并成一个完整的文件。
html文件:
<!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>大文件切割上传带进度条</title><linkrel="stylesheet"href=""><script>varxhr=newXMLHttpRequest();//xhr对象varclock=null;functionselfile(){clock=window.setInterval(sendfile,1000);}varsendfile=(function(){constLENGTH=1024*1024*10;//每次上传的大小varstart=0;//每次上传的开始字节varend=start+LENGTH;//每次上传的结尾字节varsending=false;//表示是否正在上传varfd=null;//创建表单数据对象varblob=null;//二进制对象varpercent=0;return(function(){//如果有块正在上传,则不进行上传if(sending==true){return;}varfile=document.getElementsByName('video')[0].files[0];//文件对象//如果sta>file.size,就结束了if(start>file.size){clearInterval(clock);return;}blob=file.slice(start,end);//根据长度截取每次需要上传的数据fd=newFormData();//每一次需要重新创建fd.append('video',blob);//添加数据到fd对象中up(fd);//重新设置开始和结尾start=end;end=start+LENGTH;sending=false;//上传完了//显示进度条percent=100*start/file.size;if(percent>100){percent=100;}document.getElementById('bar').style.width=percent+'%';document.getElementById('bar').innerHTML=parseInt(percent)+'%';});})();functionup(fd){xhr.open('POST','13-slice-upload.php',false);xhr.send(fd);}</script><style>#progress{width:500px;height:30px;border:1pxsolidgreen;}#bar{width:0%;height:100%;background-color:green;}</style></head><body><h1>大文件切割上传带进度条</h1><divid="progress"><divid="bar"></div></div><inputtype="file"name="video"onchange="selfile();"/></body></html>
php文件:
<?php/***大文件切割上传,把每次上传的数据合并成一个文件*@authorwebbc*/$filename='./upload/upload.wmv';//确定上传的文件名//第一次上传时没有文件,就创建文件,此后上传只需要把数据追加到此文件中if(!file_exists($filename)){move_uploaded_file($_FILES['video']['tmp_name'],$filename);}else{file_put_contents($filename,file_get_contents($_FILES['video']['tmp_name']),FILE_APPEND);}?>