日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大文件切片功能

發布時間:2025/7/25 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大文件切片功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

近期接到的新需求:上傳大文件,因文件上傳的大小不定,所以需要切片上傳
前端代碼:

import md5 from "js-md5";/*** 緩存轉換 導入大文件* @param {*} that this* @param {*} file 上傳文件的對象* @param {*} size 每次上傳文件的限制大小* @param {*} progress 上傳文件的進度條* @param {*} url string 上傳文件的url* @param {*} module_name string 上傳文件的需要上文的文件名*/ export function uploadFile(that, file, size, progress, url, module_name) {let xhr = new XMLHttpRequest();let form_data = new FormData();let start = 0;let end = start + that.size;let blob;let blob_num = 1;blob = cutFile(file);sendFile(blob, file);blob_num += 1;//切割文件function cutFile(file) {let file_blob = file.slice(start, end);start = end;end = start + that.size;return file_blob;};//發送文件function sendFile(blob, file) {let total_blob_num = Math.ceil(file.size / size);form_data = new FormData();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);form_data.append('module_name', module_name);form_data.append('code', md5(md5(file.name + global.ENCRYPTION_KEY)));xhr.open("POST", global.IMG_URL + url, false);xhr.onreadystatechange = function () {if (total_blob_num == 1) {that.progress = 100;} else {that.progress = Math.min(100, (blob_num / total_blob_num) * 100);}if (JSON.parse(xhr.response).code == 0) {that.file_name = '';that.$Message.error('上傳錯誤');return false} else if (JSON.parse(xhr.response).code == 2) {that.$Message.success('上傳成功');that.file_path = JSON.parse(xhr.response).file_path;return false}let t = setTimeout(function () {if (start < file.size) {blob = cutFile(file);sendFile(blob, file);blob_num += 1;} else {clearTimeout(t);}}, 1000);}xhr.send(form_data);} }

后端代碼:我們后端是用PHP完成的

<?phpif (!defined('BASEPATH')) exit('No direct script access allowed'); header('Content-Type:text/html;charset=utf-8');header('Access-Control-Allow-Origin:*');class chunkupload extends CI_Controller {private $filepath; // 上傳目錄private $tmpPath; // PHP文件上傳臨時目錄private $blobNum; // 當前第幾個文件塊private $totalBlobNum; // 文件塊總數private $fileName; // 原文件名private $finalFileName; // 經過處理的最終文件名public function __construct(){parent::__construct();}// 大文件分片上傳public function bigFileUpload(){if (empty($_POST['code'])) {echo_json(0,'code不能為空');}if (empty($_POST['module_name'])) {echo_json(0,'上傳目錄不能為空');}if (empty($_POST['blob_num'])) {echo_json(0,'當前片數不能為空');}if (empty($_POST['file_name'])) {echo_json(0,'文件名不能為空');}if (empty($_POST['total_blob_num'])) {echo_json(0,'總片數不能為空');}if (empty($_FILES['file'])) {echo_json('file為空');}if (empty($_FILES['file']['tmp_name'])) {echo_json(0,'tmp_name為空');}$fileDir = './uploads/'.trim($_POST['module_name'],'/').'/' . date('Y/m/d');$this->filepath = $fileDir;$this->tmpPath = $_FILES['file']['tmp_name'];$this->blobNum = $_POST['blob_num'];$this->totalBlobNum = $_POST['total_blob_num'];$this->fileName = $_POST['file_name'];// 校驗$this->validate($_POST['code'], $_POST['file_name']);// 移動文件$this->moveFile();// 合并分塊的文件$this->fileMerge();// 響應狀態$this->apiReturn();}// 判斷是否是最后一塊,如果是則進行文件合成并且刪除文件塊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);}$ext = '.'.substr(strrchr($this->fileName, '.'), 1);$this->finalFileName = date('YmdHis') . rand('10000', '99999') . $ext;file_put_contents($this->filepath.'/'. $this->finalFileName,$blob);$this->deleteFileBlob();}}// 刪除文件塊private function deleteFileBlob(){for($i=1; $i<= $this->totalBlobNum; $i++){@unlink($this->filepath.'/'. $this->fileName.'__'.$i);}}// 移動文件private function moveFile(){$this->touchDir();$filename = $this->filepath.'/'. $this->fileName.'__'.$this->blobNum;move_uploaded_file($this->tmpPath,$filename);}// API返回數據public function apiReturn(){header('Content-type: application/json');if($this->blobNum == $this->totalBlobNum){if(file_exists($this->filepath.'/'. $this->finalFileName)){$data['code'] = 2;$data['msg'] = 'success';$data['file_path'] = ltrim($this->filepath,'./').'/'. $this->finalFileName;echo json_encode($data);exit;}}else{if(file_exists($this->filepath.'/'. $this->fileName.'__'.$this->blobNum)){$data['code'] = 1;$data['msg'] = '上傳中,共:'.$this->totalBlobNum.'塊,當前第'.$this->blobNum.'塊....';$data['file_path'] = '';echo json_encode($data);exit;}}}// 建立上傳文件夾private function touchDir(){if(!file_exists($this->filepath)){return mkdir($this->filepath, 0777, true);}}// 參數校驗private function validate($code,$fileName){if (md5(md5($fileName.config_item('encryption_key'))) != $code) {echo_json(0,'參數校驗失敗');}} }function echo_json($code = 0, $msg = '', $data = array()) {$arr = array('code' => $code,'msg' => $msg,'data' => $data);echo json_encode($arr);exit; }

?

轉載于:https://www.cnblogs.com/mxyr/p/10343039.html

總結

以上是生活随笔為你收集整理的大文件切片功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美综合影院 | 一区二区三区四区视频在线观看 | av中文字幕一区二区三区 | 久久国产福利 | 鲁大师私人影院在线观看 | 日韩精品系列 | 亚洲综合一 | 久久久久久av无码免费网站 | 亚洲综合激情五月久久 | 日韩欧美精品在线播放 | 天天5g天天爽免费观看 | 天天躁夜夜操 | 欧美日韩精品一二三区 | 成人免费一区二区三区 | 人人操在线播放 | 一区二区三区日 | 亚洲欧美在线一区二区 | 亚洲男人天堂网站 | 久久伊人一区二区 | 性日本xxx | 免费在线一级片 | 黄色一级大片在线免费看产 | jzzijzzij亚洲成熟少妇在线播放 狠狠躁日日躁夜夜躁2022麻豆 | 特级毛片在线观看 | 欧美一级大片在线观看 | 成人国产精品久久 | 欧美.www| 激情视频在线观看免费 | 人人草av| 西欧毛片 | 亚洲激情免费视频 | 国产在线观看免费 | 久久avav | 美女隐私直播 | 不卡的日韩av | 自拍视频在线 | 日本加勒比在线 | 韩国一区二区视频 | 日本aaa视频| 久久精品五月天 | 欧美国产一区二区 | 娇小tube性极品娇小 | 久久精品国产亚洲av久一一区 | 中文字幕有码视频 | 国产免费91 | 青青草老司机 | 青娱乐精品视频 | 日日摸日日干 | 亚洲每日更新 | 蜜臀av粉嫩av懂色av | 亚洲av无码一区二区二三区 | 免费播放毛片精品视频 | 最新中文字幕av专区 | 中国少妇初尝黑人巨大 | 国产一区二区三区乱码 | xxsm.com| 香蕉国产在线视频 | www,日韩| 天堂在线免费视频 | 国产午夜影院 | 久久精品电影网 | 国产高清在线观看视频 | 免费一级a毛片夜夜看 | 欧美色图一区 | 亚洲欧美国产另类 | 插插看看 | 一区二区在线不卡 | 欧美一级片黄色 | 日本三级午夜理伦三级三 | 国产美女无遮挡免费 | 精品少妇久久久 | 国产免费999 | 天天射天天干天天 | 精品一区av| 成人av教育| 色婷婷国产精品视频 | 越南a级片 | 尤物一区 | 韩国19主播内部福利vip | 女同性αv亚洲女同志 | aa在线视频 | 国产精品色呦呦 | 乱一色一乱一性一视频 | 欧美精品一区二区三区蜜臀 | 亚洲人人夜夜澡人人爽 | 成年人在线播放视频 | 91豆花视频| 伊人中文在线 | av高清 | 久久免费毛片 | 欧美丰满老妇熟乱xxxxyyy | 69xxx国产 | 正在播放欧美 | 国产情侣酒店自拍 | 国产精品久久综合 | 成人av动漫 | 国产高清一区在线观看 | 久久精品无码专区 | 99热这里都是精品 |