php带截切图片上传_PHP大文件切割上传并带上进度条功能
大家都晓得php上传文件有限制,如果没有更改过php.ini文件的话,默认的上传大小限制为2M,那么该怎么上传大文件了,比如说上传一个1G多的大文件,可以使用大文件切割上传的方法来解决。
何为大文件切割上传?原理:利用HTML5的新特征php上传视频进度条,将文件内容切割成分段的二进制信息,然后每天向服务器上传一段,而服务器,只须要把我们每天上传的二进制信息整合储存至一个文件中,那么最后这个文件就是所上传的文件。
由于php.ini默认的上传大小为2M,如果每批都上传2M,我检测的时侯时间比较长,这里我将其限制大小该为20M,最大post数据为28M,便于检测。如果实际开发中不能更改其参数,则每批上传的数据不能超出最大限制。
post_max_size = 28M
upload_max_filesize = 20M
JavaScript中的File对象在之前的文章中我们早已使用至了这个Api,File对象中保存了文件的大小、名称、类型等信息
JavaScript中的Blob对象Blob对象是二进制对象,也是File对象的父类,Blob对象中有一个很重要的方式:slice() 方法,利用这个方式我们可以把文件内容切割成二进制信息。slice() 方法接受三个参数,起始偏移量,结束偏移量,还有可选的 mime 类型。如果 mime 类型,没有设置,那么新的 Blob 对象的 mime 类型跟父级一样。
本文就两个文件,实现切割上传文件,分别为13-slice-upload-fix.html文件,13-slice-upload.php文件,页面中主要有一个上传控件,确认文件后响应selfile技巧php上传视频进度条,然后调用文件信息,设置每批上传文件限制为10M,接着在while循环中,不断的切割文件,然后发送上传恳求。
13-slice-upload-fix.html
大文件切割上传带进度条
var xhr = new XMLHttpRequest();//xhr对象
var clock = null;
function selfile(){
clock = window.setInterval(sendfile,1000);
}
var sendfile = (function (){
const LENGTH = 1024 * 1024 * 10;//每次上传的大小
var start = 0;//每次上传的开始字节
var end = start + LENGTH;//每次上传的结尾字节
var sending = false;//表示是否正在上传
var fd = null;//创建表单数据对象
var blob = null;//二进制对象
var percent = 0;
return (function (){
//如果有块正在上传,则不进行上传
if(sending == true){
return;
}
var file = document.getElementsByName('video')[0].files[0];//文件对象
//如果sta>file.size,就结束了
if(start > file.size){
clearInterval(clock);
return;
}
blob = file.slice(start,end);//根据长度截取每次需要上传的数据
fd = new FormData();//每一次需要重新创建
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)+'%';
});
})();
function up(fd){
xhr.open('POST','13-slice-upload.php',false);
xhr.send(fd);
}
#progress{
width:500px;
height:30px;
border:1px solid green;
}
#bar{
width:0%;
height:100%;
background-color: green;
}
大文件切割上传带进度条
13-slice-upload.php
也可以关注我的PHP专栏:PHP7进阶架构师
运行结果图:
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
