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进阶架构师

运行结果图:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部