成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

PHP大文件分割分片上傳實(shí)現(xiàn)代碼

瀏覽:237日期:2022-09-08 15:47:56

服務(wù)端為什么不能直接傳大文件?跟php.ini里面的幾個(gè)配置有關(guān)

upload_max_filesize = 2M //PHP最大能接受的文件大小post_max_size = 8M //PHP能收到的最大POST值’memory_limit = 128M //內(nèi)存上限max_execution_time = 30 //最大執(zhí)行時(shí)間

當(dāng)然不能簡(jiǎn)單粗暴的把上面幾個(gè)值調(diào)大,否則服務(wù)器內(nèi)存資源吃光是遲早的問題。

解決思路

好在HTML5開放了新的FILE API,也可以直接操作二進(jìn)制對(duì)象,我們可以直接在瀏覽器端實(shí)現(xiàn)文件切割,按照以前的做法就得用Flash的方案,實(shí)現(xiàn)起來會(huì)麻煩很多。

JS思路

1.監(jiān)聽上傳按鈕的onchange事件

2.獲取文件的FILE對(duì)象

3.把文件的FILE對(duì)象進(jìn)行切割,并且附加到FORMDATA對(duì)象中

4.把FORMDATA對(duì)象通過AJAX發(fā)送到服務(wù)器

5.重復(fù)3、4步驟,直到文件發(fā)送完。

PHP思路

1.建立上傳文件夾

2.把文件從上傳臨時(shí)目錄移動(dòng)到上傳文件夾

3.所有的文件塊上傳完成后,進(jìn)行文件合成

4.刪除文件夾

5.返回上傳后的文件路徑

DEMO代碼

前端部分代碼

<!doctype html><html lang='en'><head> <meta charset='UTF-8'> <meta name='viewport' content='width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'> <meta http-equiv='X-UA-Compatible' content='ie=edge'> <title>Document</title> <style> #progress{ width: 300px; height: 20px; background-color:#f7f7f7; box-shadow:inset 0 1px 2px rgba(0,0,0,0.1); border-radius:4px; background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9); } #finish{ background-color: #149bdf; background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent); background-size:40px 40px; height: 100%; } form{ margin-top: 50px; } </style></head><body><div id='progress'> <div progress='0'></div></div><form action='./upload.php'> <input type='file' name='file' id='file'> <input type='button' value='停止' id='stop'></form><script> var fileForm = document.getElementById('file'); var stopBtn = document.getElementById(’stop’); var upload = new Upload(); fileForm.onchange = function(){ upload.addFileAndSend(this); } stopBtn.onclick = function(){ this.value = '停止中'; upload.stop(); this.value = '已停止'; } function Upload(){ var xhr = new XMLHttpRequest(); var form_data = new FormData(); const LENGTH = 1024 * 1024; var start = 0; var end = start + LENGTH; var blob; var blob_num = 1; var is_stop = 0 //對(duì)外方法,傳入文件對(duì)象 this.addFileAndSend = function(that){ var file = that.files[0]; blob = cutFile(file); sendFile(blob,file); blob_num += 1; } //停止文件上傳 this.stop = function(){ xhr.abort(); is_stop = 1; } //切割文件 function cutFile(file){ var file_blob = file.slice(start,end); start = end; end = start + LENGTH; return file_blob; }; //發(fā)送文件 function sendFile(blob,file){ var total_blob_num = Math.ceil(file.size / LENGTH); form_data.append(’file’,blob); form_data.append(’blob_num’,blob_num); form_data.append(’total_blob_num’,total_blob_num); form_data.append(’file_name’,file.name); xhr.open(’POST’,’./upload.php’,false); xhr.onreadystatechange = function () {var progress;var progressObj = document.getElementById(’finish’);if(total_blob_num == 1){ progress = ’100%’;}else{ progress = Math.min(100,(blob_num/total_blob_num)* 100 ) +’%’;}progressObj.style.width = progress;var t = setTimeout(function(){ if(start < file.size && is_stop === 0){ blob = cutFile(file); sendFile(blob,file); blob_num += 1; }else{ setTimeout(t); }},1000); } xhr.send(form_data); } }</script></body></html>

PHP部分代碼

<?phpclass Upload{ private $filepath = ’./upload’; //上傳目錄 private $tmpPath; //PHP文件臨時(shí)目錄 private $blobNum; //第幾個(gè)文件塊 private $totalBlobNum; //文件塊總數(shù) private $fileName; //文件名 public function __construct($tmpPath,$blobNum,$totalBlobNum,$fileName){ $this->tmpPath = $tmpPath; $this->blobNum = $blobNum; $this->totalBlobNum = $totalBlobNum; $this->fileName = $fileName;$this->moveFile(); $this->fileMerge(); } //判斷是否是最后一塊,如果是則進(jìn)行文件合成并且刪除文件塊 private function fileMerge(){ if($this->blobNum == $this->totalBlobNum){ $blob = ’’; for($i=1; $i<= $this->totalBlobNum; $i++){$blob .= file_get_contents($this->filepath.’/’. $this->fileName.’__’.$i); } file_put_contents($this->filepath.’/’. $this->fileName,$blob); $this->deleteFileBlob(); } } //刪除文件塊 private function deleteFileBlob(){ for($i=1; $i<= $this->totalBlobNum; $i++){ @unlink($this->filepath.’/’. $this->fileName.’__’.$i); } } //移動(dòng)文件 private function moveFile(){ $this->touchDir(); $filename = $this->filepath.’/’. $this->fileName.’__’.$this->blobNum; move_uploaded_file($this->tmpPath,$filename); } //API返回?cái)?shù)據(jù) public function apiReturn(){ if($this->blobNum == $this->totalBlobNum){if(file_exists($this->filepath.’/’. $this->fileName)){ $data[’code’] = 2; $data[’msg’] = ’success’; $data[’file_path’] = ’http://’.$_SERVER[’HTTP_HOST’].dirname($_SERVER[’DOCUMENT_URI’]).str_replace(’.’,’’,$this->filepath).’/’. $this->fileName;} }else{if(file_exists($this->filepath.’/’. $this->fileName.’__’.$this->blobNum)){ $data[’code’] = 1; $data[’msg’] = ’waiting for all’; $data[’file_path’] = ’’;} } header(’Content-type: application/json’); echo json_encode($data); } //建立上傳文件夾 private function touchDir(){ if(!file_exists($this->filepath)){ return mkdir($this->filepath); } }}//實(shí)例化并獲取系統(tǒng)變量傳參$upload = new Upload($_FILES[’file’][’tmp_name’],$_POST[’blob_num’],$_POST[’total_blob_num’],$_POST[’file_name’]);//調(diào)用方法,返回結(jié)果$upload->apiReturn();

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: PHP
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩av网站免费在线| 色综合av在线| 久久一区二区三区超碰国产精品| 亚洲欧美一区二区在线观看| 91污在线观看| 26uuu亚洲综合色| 国产精华液一区二区三区| 欧美综合一区二区| 日韩专区欧美专区| 久久婷婷一区| 一区二区三区欧美亚洲| 亚洲国产激情| 国产精品乱码一区二区三区软件| 99精品视频在线观看| 日韩一区二区三区免费看 | 国产精品毛片久久久久久| 国产成人综合自拍| 日韩欧美在线网站| 国产成人啪午夜精品网站男同| 欧美精品亚洲二区| 狠狠色丁香久久婷婷综| 欧美精品成人一区二区三区四区| 国内外成人在线| 日韩视频一区二区在线观看| 国产一二精品视频| 日韩免费观看高清完整版| 国产成人精品一区二| 日韩欧美亚洲国产精品字幕久久久| 国产一区二区91| 欧美一级二级三级蜜桃| 国产福利一区二区三区在线视频| 日韩欧美一区二区久久婷婷| 亚洲乱码中文字幕| 中文有码久久| 夜夜嗨av一区二区三区网页| 在线视频一区观看| 韩国欧美一区| 久久精品盗摄| 午夜精品福利一区二区蜜股av | 国产高清不卡二三区| 日韩一级黄色大片| 9l国产精品久久久久麻豆| 久久久蜜臀国产一区二区| 91欧美一区二区| 国产精品天干天干在线综合| 欧美日韩影院| 亚洲欧美日韩在线| 亚洲影音一区| 老司机一区二区| 欧美在线不卡一区| 亚洲午夜久久久久久久久电影网| 国产一区二区高清视频| 亚洲一区二区在线视频| 乱码第一页成人| 久久激情五月激情| 91精品国产综合久久香蕉的特点| 成人免费视频app| 久久久久国产免费免费| 亚洲调教视频在线观看| 一区二区三区av电影 | 99精品视频免费观看| 有坂深雪av一区二区精品| 久久久久久久久久久久久久一区| 麻豆国产欧美日韩综合精品二区 | 成人三级伦理片| 国产日韩欧美电影| 国产精品裸体一区二区三区| 免费在线成人网| 精品日韩在线观看| 激情欧美亚洲| 五月激情六月综合| 日韩一区二区在线免费观看| 日一区二区三区| 亚洲日本免费| 亚洲18色成人| 欧美福利电影网| 欧美在线网站| 亚洲成人动漫在线免费观看| 日本高清不卡在线观看| 国产成人精品影视| 国产精品久久三| 免费久久99精品国产自| 极品少妇xxxx精品少妇偷拍| 久久嫩草精品久久久精品| 亚洲黄色av| 久久精品国产亚洲a| 精品福利一二区| 国产欧美一区二区色老头| 麻豆成人在线观看| 欧美韩国日本综合| 色偷偷久久人人79超碰人人澡 | 亚洲精品国产一区二区精华液| 久久精品综合一区| 国产精品综合久久| 国产精品久久久久一区| 久久综合网络一区二区| av一区二区不卡| 天天综合网天天综合色| 精品黑人一区二区三区久久| 国产欧美69| 亚洲少妇屁股交4| 91亚洲精品久久久蜜桃网站 | 亚洲精品国产一区二区精华液 | 欧美体内she精高潮| 91原创在线视频| 亚洲无人区一区| 日韩一区二区在线看片| 亚洲精品欧美精品| 国产成人久久精品77777最新版本| 亚洲人吸女人奶水| 欧美欧美午夜aⅴ在线观看| 亚洲午夜激情| 韩国v欧美v日本v亚洲v| 国产日产欧美精品一区二区三区| 色婷婷久久久综合中文字幕| 欧美精品成人| 激情六月婷婷久久| 亚洲精品国产a久久久久久| 日韩欧美中文字幕制服| 国产性做久久久久久| 日韩av午夜在线观看| 欧美精品一区二区三区在线 | 日韩欧美高清一区| 另类亚洲自拍| 欧美日本国产精品| 国产真实乱偷精品视频免| 中文字幕在线视频一区| 日韩一级二级三级| 激情久久久久久久| 精品综合久久久久久8888| 亚洲老司机在线| 精品国产一区二区在线观看| 久久国产一二区| 欧美午夜不卡| 国产电影精品久久禁18| 日韩精品高清不卡| 亚洲色图清纯唯美| 国产女人水真多18毛片18精品视频| 7777精品伊人久久久大香线蕉的| 久久精品毛片| 亚洲看片免费| 色综合天天综合网天天狠天天| 久久不见久久见中文字幕免费| 亚洲综合另类小说| 国产精品久久免费看| 69成人精品免费视频| 亚洲综合色网站| www国产成人| 在线播放视频一区| 一本色道久久综合狠狠躁的推荐| 亚洲国产精品毛片| 色综合中文字幕| 成人小视频免费在线观看| 麻豆专区一区二区三区四区五区| 亚洲一区二区黄色| 亚洲欧洲综合另类| 久久久影院官网| 欧美一区二区三区日韩视频| 欧美综合天天夜夜久久| 国产精品一区二区三区四区五区 | 九一久久久久久| 午夜电影一区二区| 亚洲一区二区三区美女| 中文字幕中文在线不卡住| 久久精品一区二区三区不卡牛牛| 欧美一区二区啪啪| 欧美影视一区二区三区| aa成人免费视频| 激情综合网址| 精品福利电影| 激情欧美亚洲| 欧美日韩综合| 午夜精品一区二区三区四区| 成人免费观看男女羞羞视频| 麻豆精品精品国产自在97香蕉| 日本女优在线视频一区二区 | 亚洲一区在线视频| 亚洲欧美一区二区三区国产精品| 国产欧美在线观看一区| 久久久91精品国产一区二区三区| 精品免费视频一区二区| 91精品国产综合久久香蕉麻豆| 欧美精品粉嫩高潮一区二区| 欧美亚洲综合一区| 欧美午夜电影在线播放| 欧美天堂亚洲电影院在线播放 | 国产网站一区二区| 久久久久久一二三区| 久久精品一区蜜桃臀影院| 久久久综合网站| 国产亚洲美州欧州综合国| 国产视频在线观看一区二区三区| 久久久久久久久久久电影| 久久精品亚洲乱码伦伦中文| 国产亚洲欧美日韩日本| 中文字幕制服丝袜一区二区三区 | 久久久噜噜噜久噜久久综合| www一区二区| 欧美激情一区二区三区蜜桃视频 | 国产一区二区免费在线|