您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javascript、php优雅的文件切片上传
发布时间:2020-06-21 10:03:34编辑:雪饮阅读()
在2-3年前曾经做过文件切片上传,那个时候JavaScript的await还没有出现呢,所以那个时候的代码在现在看来还不够糖,最近遇到类似需求,则重新整理了一下代码。如
前端:
async function filePartUpload(filePart,fileFlag){
var formData = new FormData();
formData.append("file",filePart);
formData.append("fileFlag",fileFlag);
load= layerLoad();
var data=await new Promise((resolve => {
$.ajax({
url:"<{link ctl='LetsgoMessenger:sectionUploadFile' http='waimai'}>", /*接口域名地址*/
type:'post',
data: formData,
contentType: false,
processData: false,
dataType:"json",
success:function(data){
if(typeof (data.error)!="undefined"){
if(data.error>0){
layer.msg(data.message);
layer.close(load);
return;
}
}
resolve(data.content);
layer.close(load);
},
error:ajaxError
})
}));
return data;
}
async function sectionUploadFile(file){
var partSize=1*1024*1024;//每次切1M
var partStart=0;
var partEnd
var blob
var percent;
var partList=[];
var partNum=Math.ceil(file.size/partSize);
for(var i=0;i<partNum;i++){
partEnd=partStart+partSize;
blob=file.slice(partStart,partEnd);
partStart=partEnd;
partList.push(blob);
}
//队列上传
var fileFlag=userData.ID+moment().format('YYYY_MM_DD_HH_mm_ss',new Date())+"."+getFileExt(file.name);
for(var i in partList){
var cdata=await filePartUpload(partList[i],fileFlag);
percent=((i+1)/(partList.length)*100).toFixed(2);
layer.msg(percent+"%");
}
return fileFlag;
}
后端:
public function sectionUploadFile(){
$fileFlag=$_POST["fileFlag"];
$fullFilePath=$_SERVER["DOCUMENT_ROOT"]."/attachs/cache/".$fileFlag;
if(!file_exists($fullFilePath)){
move_uploaded_file($_FILES['file']['tmp_name'],$fullFilePath);
}
else{
file_put_contents($fullFilePath,file_get_contents($_FILES['file']['tmp_name']),FILE_APPEND);
}
$this->msgbox->json();
}
关键字词:javascript,php,切片上传