| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- <?php
- namespace App\Models\manager\Common;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Intervention\Image\Facades\Image;
- use App\Servers\Aliyun\Oss;
- /**
- * 附件模型
- * @author 唐远望
- * @version 1.0
- * @date 2025-12-23
- */
- class Attachment extends Model
- {
- use HasFactory;
- // 与模型关联的表名
- protected $table = 'attachment';
- // 是否主动维护时间戳
- public $timestamps = false;
- // 定义时间戳字段名
- // const CREATED_AT = 'insert_time';
- // const UPDATED_AT = 'update_time';
- /**
- * 上传图片到阿里云oss
- * @author 唐远望
- * @version 1.0
- * @date 2025-12-23
- * @param $request_data 请求数据
- * @return array
- */
- public function uploadMediaAsync($file)
- {
- $file_info = $this->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;
- }
- }
|