本文实例讲述了php+ajax实现文件切割上传功能。分享给大家供大家参考,具体如下:
html5中的file对象继承blob二进制对象,blob提供了一个slice函数,可以用来切割文件数据。
var myform = document.getelementbyid("myform");
var upfile = document.getelementbyid("upfile");
myform.onsubmit = function() {
//获取文件对象
var file = upfile.files[0];
//获取文件大小
var filesize = file.size;
//一次截取的大小(字节)
var cutsize = 1024 * 1024 * 10;
//开始截取位置
var cutstart = 0;
//结束截取位置
var cutend = cutstart + cutsize;
//截取的临时文件
var tmpfile = new blob();
while(cutstart < filesize) {
tmpfile = file.slice(cutstart, cutend);
//我们创建一个formdata对象
var fd = new formdata();
//把文件添加到formdata对象中
fd.append("file", tmpfile);
var xhr = new xmlhttprequest();
//这里使用同步
xhr.open("post", "upfile.php", false);
//上传进度
console.log(math.round( (cutstart + tmpfile.size) / filesize * 100) + "%");
//发送formdata对象
xhr.send(fd);
//重新设置截取文件位置
cutstart = cutend;
cutend = cutstart + cutsize;
}
return false;
};
upfile.php代码如下:
$uploaddir = './upload/';
if(!file_exists($uploaddir)) {
@mkdir($uploaddir, 0777, true);
}
$uploadfile = $uploaddir . basename($_files['file']['name']);
if(!file_exists($uploadfile)) {
//如果文件不存在
move_uploaded_file($_files['file']['tmp_name'], $uploadfile);
} else {
//如果文件已存在,追加数据
file_put_contents($uploadfile, file_get_contents($_files['file']['tmp_name']), file_append);
}
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!