loadConfig($config); $this->_isFileUpload = $config['_is_file_upload'] ?? true; if ($this->_isFileUpload) { $this->files = request()->file(); $this->verify(); } } abstract function uploadFile(array $options): mixed; abstract function uploadServerFile(string $filePath): mixed; abstract public function uploadBase64(string $base64, string $extension = 'JPEG'): mixed; protected function loadConfig(array $config): void { $this->config = $config; // 处理 root_dir 配置(作为根目录) if (isset($this->config['root_dir']) && is_callable($this->config['root_dir'])) { $this->config['root_dir'] = (string)$this->config['root_dir']() ?: $this->config['root_dir']; } // 处理 dirname 配置(作为根目录,保持兼容) if (isset($this->config['dirname']) && is_callable($this->config['dirname'])) { $this->config['dirname'] = (string)$this->config['dirname']() ?: $this->config['dirname']; } // 处理 sub_dir 配置(作为子目录) if (isset($this->config['sub_dir']) && is_callable($this->config['sub_dir'])) { $this->config['sub_dir'] = (string)$this->config['sub_dir']() ?: $this->config['sub_dir']; } } /** * 文件校验 */ protected function verify(): void { if (empty($this->files)) { throw new UploadException('未找到符合条件的文件资源'); } foreach ($this->files as $file) { if (!$file->isValid()) { throw new UploadException('未选择文件或者无效的文件'); } } } /** * 文件大小 * * @param \Webman\Http\UploadFile $file * * @return int */ protected function getSize(UploadFile $file): int { return $file->getSize(); } /** * 计算文件哈希值 * * @param string $pathname * * @return string */ protected function getUniqueId(string $pathname): string { return hash_file($this->algo, $pathname); } }