getFileInfo($file); $fileName = $file_info ? $file_info['hash_name'] : ''; $filePath = $file_info ? $file_info['path_name'] : ''; $Oss = new Oss(); $res_img_url = $Oss->uploadFile($fileName, $filePath, "zhijiayun-jiansuo", "uploads/process"); if ($res_img_url) { $this->addUploadimage($file, $res_img_url); } return $res_img_url; } /** * 获取签名上传地址 * @author 唐远望 * @version 1.0 * @date 2025-05-29 * @return array */ public function getSignUrl($file_name) { $Oss = new Oss(); $path_dir = "uploads/process/" . date('ymd') . '/' . uniqid() . $file_name; $res_img_url = $Oss->signUrl("zhijiayun-jiansuo", $path_dir); return $res_img_url; } /** * 添加图片上传记录 * @author 唐远望 * @version 1.0 * @date 2025-12-23 * @param $file 文件对象 * @param $url 素材url * @return int */ public function addUploadimage($file, $url) { $image = Image::make($file->getPathname()); $fileInfo = $this->getFileInfo($file); $attachment_data = [ 'category' => 'image', 'url' => $url, 'imagewidth' => $image->width(), 'imageheight' => $image->height(), 'imagetype' => $fileInfo['real_extension'], 'filename' => $fileInfo['original_name'], 'filesize' => $fileInfo['file_size'], 'mimetype' => $fileInfo['mime_type'], 'createtime' => time(), 'storage' => 'tencent', 'sha1' => $fileInfo['hash_name'], ]; $result = $this->insertGetId($attachment_data); return $result; } /** * 校验文件格式 * @param $file * @return string */ public function checkUploadFile($file) { $media_type = ''; $allowed_image_extensions = ['jpg', 'jpeg', 'png', 'gif']; $extension = $file->getClientOriginalExtension(); if (in_array(strtolower($extension), $allowed_image_extensions)) { $media_type = 'image'; } $allowed_video_extensions = ['mp4', 'avi', 'wmv', 'mov', 'rmvb', 'flv']; if (in_array(strtolower($extension), $allowed_video_extensions)) { $media_type = 'video'; } $allowed_voice_extensions = ['amr', 'wav', 'wma', 'aac', 'flac', 'mp3']; if (in_array(strtolower($extension), $allowed_voice_extensions)) { $media_type = 'voice'; } $allowed_txt_extensions = ['txt']; if (in_array(strtolower($extension), $allowed_txt_extensions)) { $media_type = 'file'; } return $media_type; } /** * 校验素材信息 * @param $media_type * @param $media_file * @return bool|array */ public function checkuploadmedia($media_file) { $media_type = $this->checkUploadFile($media_file); switch ($media_type) { case 'image': if (!$this->checkImgSize($media_file)) { return ['errcode' => 'error', 'message' => '图片大小超出限制']; } break; case 'voice': if (!$this->checkVoiceSize($media_file)) { return ['errcode' => 'error', 'message' => '语音大小超出限制']; } break; case 'video': if (!$this->checkVideoSize($media_file)) { return ['errcode' => 'error', 'message' => '视频大小超出限制']; } break; case 'file': if (!$this->checkTxtSize($media_file)) { return ['errcode' => 'error', 'message' => '文件大小超出限制']; } break; default: return ['errcode' => 'error', 'message' => '素材类型错误']; } } /** * 获取文件信息 * @param $file * @return bool|array */ public function getFileInfo($file) { if (!$file) { return false; } $fileInfo = [ 'original_name' => $file->getClientOriginalName(), //获取文件原始名称(客户端上传时的文件名) 'extension' => $file->getClientOriginalExtension(), //获取文件扩展名 'mime_type' => $file->getClientMimeType(), //获取文件mime类型 'file_size' => $file->getSize(), //获取文件大小 'real_extension' => $file->extension(), //获取文件真实扩展名 'hash_name' => $file->hashName(), //获取文件哈希名(唯一标识) 'path_name' => $file->getPathname() //获取文件绝对路径 ]; // 使用 $fileInfo 中的信息 return $fileInfo; } /** * 校验图片格式 * @param $file * @return bool */ public function checkImgFormat($file) { $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif']; $extension = $file->getClientOriginalExtension(); if (!in_array(strtolower($extension), $allowed_extensions)) { return false; } return true; } /** * 校验图片大小 * @param $file * @param int $size */ public function checkImgSize($file, $size = 2) { $max_size = $size * 1024 * 1024; // 2M if ($file->getSize() > $max_size) { return false; } return true; } /** * 校验语音格式 * @param $file */ public function checkVoiceFormat($file) { $allowed_extensions = ['amr', 'wav', 'wma', 'aac', 'flac']; $extension = $file->getClientOriginalExtension(); if (!in_array(strtolower($extension), $allowed_extensions)) { return false; } return true; } /** * 校验语音大小 * @param $file * @param int $size */ public function checkVoiceSize($file, $size = 5) { $max_size = $size * 1024 * 1024; // 5M if ($file->getSize() > $max_size) { return false; } return true; } /** * 校验视频格式 * @param $file */ public function checkVideoFormat($file) { $allowed_extensions = ['mp4', 'avi', 'wmv', 'mov', 'rmvb', 'flv']; $extension = $file->getClientOriginalExtension(); if (!in_array(strtolower($extension), $allowed_extensions)) { return false; } return true; } /** * 校验视频大小 * @param $file * @param int $size */ public function checkVideoSize($file, $size = 10) { $max_size = $size * 1024 * 1024; // 10M if ($file->getSize() > $max_size) { return false; } return true; } /** * 校验txt格式 */ public function checkTxtFormat($file) { $allowed_extensions = ['txt']; $extension = $file->getClientOriginalExtension(); if (!in_array(strtolower($extension), $allowed_extensions)) { return false; } return true; } /** * 校验txt大小 * @param $file * @param int $size */ public function checkTxtSize($file, $size = 10) { $max_size = $size * 1024 * 1024; // 10M if ($file->getSize() > $max_size) { return false; } return true; } }