手机版

PHP大文件剪切上传功能实例分析

时间:2021-08-22 来源:互联网 编辑:宝哥软件园 浏览:

本文阐述了PHP大文件的剪切和上传功能。分享给大家参考,如下:

每个人都知道php在上传文件方面有局限性。如果php.ini文件没有修改,默认上传大小限制在2M,那么如何上传大文件,比如上传1G以上的大文件,可以通过剪切上传大文件来解决。

什么是剪切和上传大文件?

原理:利用HTML5的新特性,将文件的内容切割成段的二进制信息,然后一段一段上传到服务器,而服务器只需要将每次上传的二进制信息整合存储到一个文件中,那么最后一个文件就是上传的文件。

由于php.ini的默认上传大小是2M,如果每批都上传2M,那我要花很长时间测试。这里我将尺寸限制在20M,最大后置数据限制在28M,方便测试。如果参数在实际开发中无法修改,则每批上传的数据不能超过最大限制。

post _ max _ size=28 mupLoad _ max _ File size=20 JavaScript中的文件对象

在前一篇文章中,我们使用了这个Api,File对象存储文件的大小、名称和类型

JavaScript中的Blob对象

Blob对象是一个二进制对象,也是File对象的父类。Blob对象中有一个非常重要的方法:slice()方法,通过它我们可以将文件内容切割成二进制信息。slice()方法接受三个参数,开始偏移量、结束偏移量和可选的mime类型。如果未设置mime类型,则新Blob对象的mime类型与父对象的相同。

案例:

项目结构图:

这里写图片描述

13-slice-upload.html文件:

页面上主要有一个上传控件,确认文件后响应selfile方法,然后读取文件信息,将每批上传文件的限制设置为10M,然后在while循环中连续剪切文件,然后发送上传请求。

!doctype html head metharset=' utf-8 ' meta http-equiv=' x-ua-compatible ' content=' ie=edge ' title high文件剪切和上传/title link rel='样式表' href=' '脚本函数self ile(){ const LENGTH=1024 * 1024 * 10;//每个上传var文件的大小=document . getelementsbyname(' video ')[0]。文件[0];//file对象var totalSize=file.size//总文件大小var start=0;//每次上传的起始字节var end=start LENGTH//每次上传的结束字节var fd=null//创建表单数据对象var blob=null//二进制对象var xhr=null//xhr对象while(starttotalsize){ FD=new formdata();//每次需要重新创建xhr=new XMLHttpRequest();//每次都需要创建并设置参数xhr.open ('post ',' 13-slice-upload.php ',false);blob=file.slice(开始,结束);//根据长度截取每次需要上传的数据fd.append('video ',blob);//将数据添加到fd对象xhr . send(FD);//上传fd数据//重置开始和结束开始=结束;end=start LENGTH} }/script/headbody h1剪切并上传大文件/h1输入类型=' file ' name=' video ' on change=' selfile();'//body/html13-slice-upload.php文件:

如果第一次上传时文件不存在,请创建文件,然后仅通过将数据附加到此文件来上传。

?Php/** *大文件被剪切并上传,每个上传的数据被合并成一个文件* @ authorwebbc */$ filename='。/upload/upload . wmv ';//确认要上传的文件名//如果第一次上传时没有文件,创建一个文件,然后只通过在这个文件中追加数据来上传if(!file _ exists($ filename)){ move _ uploaded _ file($ _ FILES[' video '][' tmp _ name '],$ filename);} else { FILE _ put _ contents($ filename,FILE _ get _ contents($ _ FILES[' video '][' tmp _ name ']),FILE _ APPEND);}?操作结果图:

这里写图片描述

解释一下:

这里我上传了一个46.8M的视频文件,如果每批发送10M,总共需要发送5次,也就是说我会向服务器请求5次。如下图所示。

这里写图片描述

更多对PHP相关内容感兴趣的读者可以查看本网站专题:《php文件操作总结》、《PHP目录操作技巧汇总》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP网络编程技巧总结》、0103010

希望本文对PHP编程有所帮助。

版权声明:PHP大文件剪切上传功能实例分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。