在网上看了很多上传文件切片的文章,最后自己总结一下。主要思路如下:1.需要实现的功能。前端多文件上传。并根据文件名保存到文件夹后端判断是否是最后一个切片,合并切片2.技术采用h5文件切片切片上传请求参数:文件名:file-5bad6aab-cf7d-bfdb-356a-36d7b4ab1e1e.jpgfragname:frag-1e0d1311-2369-317b-262e-04a9f427ea8cfile:(binary)fragindex:0total:2es6asyncawaitphpmonologcomposerpackage3.开始写代码3.1前端html:上传文件点击上传,获取所有文件,处理文件$("#upload").click(function(){varfile=document.getElementById("file");//获取所有文件varfileList=file.files;//操作文件handleFiles(fileList);returnfalse;});文件处理方法:文件上传同步,上传文件asyncfunctionhandleFiles(fileList){vari=0;while(i=文件大小){结束=文件大小;}console.log('文件索引:'+index+'|处理文件切片i:'+i,'start:'+start,'end:'+end);varfrag=targetFile.slice(开始,结束);awaitsend(filename,frag,i,total,function(){console.log('文件索引:'+index+"|切片上传完成回调res111",i)});开始=结束;我++;}}}//发送异步函数send(filename,frag,index,total,cb){varformData=newFormData();varfragname="frag-"+guid();formData.append("文件名",文件名);formData.append("碎片名称",碎片名称);formData.append("文件",碎片);formData.append("fragindex",index);formData.append("总计",总计);等待$.ajax({url:url,type:'POST',cache:false,data:formData,pprocessData:false,contentType:false}).done(function(res){//console.log('res:'+index);cb&&cb();}).fail(function(res){});}3.2后台phppushHandler(newStreamHandler(__DIR__.'/my_app.log',Logger::DEBUG));$file=$_FILES['file'];//打印文件$log->info('slice',$file);$orgFileName=$_POST['filename'];$log->info("orgFileName:".$orgFileName);//获取文件名$filename=explode(".",$_POST['filename']);//获取文件后缀$ext=$filename[1];$filename=$filename[0];$log->info("ext:".$ext);//新建一个frag文件夹,以文件名命名if(!file_exists(FRAGPATH.$filename)){mkdir(FRAGPATH.$filename);}//将接收到的frag文件移动到文件夹//$frag_path=SITE_ROOT.'/dir/'.$filename.'/'.iconv('UTF-8','gbk',basename($_FILES['file']['tmp_name']));$frag_path=FRAGPATH.$filename."/".$_POST['fragname'];try{if(move_uploaded_file($_FILES['file']['tmp_name'],$frag_path)){echoresponse(["status"=>"上传成功"]);}}catch(Exception$e){thrownewException();}//将文件夹中的frags合并到最终文件中if($_POST['fragindex']==$_POST["total"]-1){$blob="";$fragDir=FRAGPATH.$文件名;$handler=@opendir($fragDir);//获取文件名while(($fragFileName=readdir($handler))!==false){$fp=fopen(FILEPATH.'/'.$orgFileName,"ab");//一定要用!==来防止目录中出现文件名“0”if($fragFileName!=="."&&$fragFileName!==".."){//方法一://$blob.=file_get_contents($fragDir."/".$fragFileName);//方法二:$value=$fragDir.“/”。$片段文件名;$handle=fopen($value,"rb");fwrite($fp,fread($handle,filesize($value)));fclose($句柄);//删除切片文件@unlink($fragDir."/".$fragFileName);}}//将切片合并到文件中//file_put_contents(FILEPATH."/".$filename.".".$ext,$blob);//删除切片文件夹@rmdir($fragDir);}最终文件上传成功,删除切片文件夹下切片的完整代码地址:https://github.com/lilili001/...