html video 设置进度条不可拖动_PHP大文件切割上传并带上进度条功能,不妨一试...
文章來自:腳本之家鏈接:https://www.jb51.net/article/164316.htm
作者:hhmp
商務合作:請加微信(QQ):2230304070
資源教程分享
碼農網-技術教程資源分享平臺:http://www.mano100.cn。這是一個資源教程分享網,網站收集了php視頻教程,前端各種視頻教程,接口API,微信公眾號,支付寶視頻教程,還有go語言,python等視頻教程,教程以鏈接+提取碼的方式分享與大家!
用公眾號每天來閱讀文章,學習,目前是最方便的。這是自閑暇的時間里,利用5分鐘讀讀技術文章,豐富自己的知識。。。當然,學習有很多種方法,不單單是基于公眾號來學習,你可以到網上查找更多的教程,學習文檔,技術書本,視頻教程!各有各的愛好吧!
視頻教程推薦
碼農網:http://www.mano100.cn ,升級VIP會員組更劃算
VIP會員組,永久會員直接查看鏈接
1 升級為月費會員:58RMB, 不可查看優質資源版塊,其他的版塊可查閱,有效期30天2 升級為年費會員:108RMB, 全站的視頻教程都可查看,有效期365天3 升級為永久會員:158RMB, 全站的視頻教程都可查看,有效期永久VIP用戶組充值:http://www.mano100.cn/rjyfk_url-url.html
注意:PC端操作更加方便!
文章正文
大家都知道php上傳文件有限制,如果沒有修改過php.ini文件的話,默認的上傳大小限制為2M,那么該如何上傳大文件了,比如說上傳一個1G多的大文件,可以使用大文件切割上傳的方式來解決。
何為大文件切割上傳?
原理:利用HTML5的新特性,將文件內容切割成分段的二進制信息,然后每次向服務器上傳一段,而服務器,只需要把我們每次上傳的二進制信息整合存儲到一個文件中,那么最后這個文件就是所上傳的文件。
由于php.ini默認的上傳大小為2M,如果每批都上傳2M,我測試的時候時間比較長,這里我將其限制大小該為20M,最大post數據為28M,便于測試。如果實際開發中不能修改其參數,則每批上傳的數據不能超過最大限制。
post_max_size?=?28Mupload_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方法,然后讀取文件信息,設置每批上傳文件限制為10M,接著在while循環中,不斷的切割文件,然后發送上傳請求。
13-slice-upload-fix.html
html><html>
<head>
??<meta?charset="utf-8">
??<meta?http-equiv="X-UA-Compatible"?content="IE=edge">
??<title>大文件切割上傳帶進度條title>
??<link?rel="stylesheet"?href="">
<script>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);
}script>
<style>#progress{width:500px;height:30px;border:1px?solid?green;
??}#bar{width:0%;height:100%;background-color:?green;
??}style>
head>
<body>
??<h1>大文件切割上傳帶進度條h1>
??<div?id="progress">
????<div?id="bar">div>
??div>
??<input?type="file"?name="video"?onchange="selfile();"?/>
body>
html>
13-slice-upload.php
<?php /**?*?大文件切割上傳,把每次上傳的數據合并成一個文件
?*?@author?webbc
?*/
$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);
}?>
運行結果圖:
以上是文章全部內容,有需要學習與經驗交流的友友或者進入微信交流群學習與交流的可以加小編為好友。咱們一起學習,有問題一起交流,一起進步!前提是你是學技術的。
總結
以上是生活随笔為你收集整理的html video 设置进度条不可拖动_PHP大文件切割上传并带上进度条功能,不妨一试...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IBM发布32纳米芯片技术 明年下半年量
- 下一篇: 怎么会这样?delete [] 了,还能