// JS页面
$("#but").click(function () {
//创建formdata对象
var fd=new FormData();
//获取文件
var file=document.getElementById("img").files[0];
// console.log(file);
//配置大文件上传需要的参数
var start=0;//开始
var size=1024*1024;//大小
var end=parseInt(start+size);//结束
var blob;//定义一个小切片,用来表示每一个小切片
var blob_num=1;//给每一个小切片定义一个编号
blob=CutFile(file)//拿到被分割的小切片
blob=sendFile(file);
//执行文件分割
function CutFile(file) {
var blob=file.slice(start,end);//分割出来的其中一个小切片
start=end;//第一次分割完的结束位置是第二次分割的开始位置
//新的结束位置
end=parseInt(start+size);
return blob;//返回分割后的每一个小切片
}
//发送(源文件,切片文件)
function sendFile() {
fd.append("file",file);
fd.append("file_name",file.name);
fd.append("blob",blob);
fd.append("blob_num",blob_num);
fd.append("blob_count",Math.ceil(file.size/size));//总共有几个切片
$.ajax(
{
url:"upload.php",
type:"post",
dataType:"json",
data:fd,
processData:false,
contentType:false,
success:function (data) {
console.log(data);
}
})
//做一个判断
if(start<file.size){
//继续执行发送
var t=setTimeout(function () {
//先让编号自增1
blob_num++;
// 然后重新获得
blob=CutFile(file);
//执行上传
sendFile(file,blob);
},1000)
}else{
//终止发送
clearTimeout(t)
}
}
})
//PHP页面 后台处理
<?php //设置字符集 header("Content-type:text/html;Charset=utf-8"); //接收数据 $data=$_POST; $file=$_FILES; echo json_encode($data); //执行上传 $path='./img/'.$data['file_name'].'_'.$data['blob_num']; move_uploaded_file($file['blob']['tmp_name'],$path); //判断切片 if($data['blob_num']==$data['blob_count']){ $b=''; //合成 for($i=1;$i<=$data['blob_count'];$i++){ $b.=file_get_contents('./img/'.$data['file_name'].'_'.$i); } file_put_contents('./img/'.$data['file_name'],$b); } ?>
浙公网安备 33010602011771号