<?php class clsSliceUpload { private $_blockFile; // 分块文件 private $_blockIdx; // 第几个文件块 private $_blockTotal; // 文件块总数 private $_config ; private $_destination_path = '';//目的路径 private $_tmp_upload_path = '';//临时路径 /** * * @param $blockFile 分块文件 * @param array $config 基础配置 */ public function __construct($blockFile,array $config = []) { $this->_blockFile = $blockFile; $this->_config = $config; $this->init($this->_config); $this->moveFile(); } /** * 基础初始化 * @param $configs */ private function init($configs){ $this->_blockIdx = $configs['blockIdx']; $this->_blockTotal = $configs['blockTotal']; $this->_tmp_upload_path = $configs['tmp_upload_path']; $this->_destination_path = $configs['destination_path']; //目的路径 } // 移动文件 private function moveFile() { move_uploaded_file($this->_blockFile, $this->_tmp_upload_path); // 保持存活状态 $_SESSION['sess_time'] = time(); //开始合并文件 $this->mergeFile(); } /** * */ private function mergeFile(){ $filepath = $this->_destination_path; $fp = fopen($filepath, 'ab'); $blob = file_get_contents($this->_tmp_upload_path); fwrite($fp,$blob); fclose($fp); unlink($this->_tmp_upload_path); } public function api() { $data = []; if ($this->_blockIdx == $this->_blockTotal) { if (file_exists($this->_destination_path)) { $data['file_path'] = $this->_destination_path; } } else { $data = [ 'percent' =>number_format($this->_blockIdx*100/$this->_blockTotal,2), ]; } echo clsFunction::json($data); } } ?>