130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | ||
| 
 | ||
| namespace app\model;
 | ||
| 
 | ||
| use app\service\AliOss;
 | ||
| use Exception;
 | ||
| use think\facade\Config;
 | ||
| use think\Image;
 | ||
| 
 | ||
| class File extends Base
 | ||
| {
 | ||
|     const IMG   = 'image';
 | ||
|     const VIDEO = 'video';
 | ||
|     const FILE  = 'file';
 | ||
| 
 | ||
|     //获取文件类型
 | ||
|     public static function getTypes()
 | ||
|     {
 | ||
|         return [
 | ||
|             'image' => '图片',
 | ||
|             'video' => '视频',
 | ||
|             'file'  => '文件'
 | ||
|         ];
 | ||
|     }
 | ||
| 
 | ||
|     //获取文件列表
 | ||
|     public static function getList($type = '', $page = 1, $per = 20)
 | ||
|     {
 | ||
|         $limit = ($page - 1) * $per;
 | ||
|         if ($type != '') {
 | ||
|             if (!in_array($type, array_keys(self::getTypes()))) {
 | ||
|                 return [];
 | ||
|             }
 | ||
|             $items = self::where('type', $type)
 | ||
|                 ->order('id desc');
 | ||
|         } else {
 | ||
|             $items = self::order('id desc');
 | ||
|         }
 | ||
|         $items = $items->limit($limit, $per)->select()->toArray();
 | ||
|         foreach ($items as &$item) {
 | ||
|             $item['sizeStr'] = sizeToStr($item['size']);
 | ||
|         }
 | ||
|         return $items;
 | ||
|     }
 | ||
| 
 | ||
|     //获取分页列表
 | ||
|     public static function getListPage($type = '', $per = 20)
 | ||
|     {
 | ||
|         if ($type != '') {
 | ||
|             if (!in_array($type, array_keys(self::getTypes()))) {
 | ||
|                 return [];
 | ||
|             }
 | ||
|             return self::where('type', $type)
 | ||
|                 ->order('id desc')
 | ||
|                 ->paginate([
 | ||
|                     'list_rows' => $per,
 | ||
|                     'query'     => [
 | ||
|                         'type' => $type
 | ||
|                     ]
 | ||
|                 ], false);
 | ||
|         } else {
 | ||
|             return self::order('id desc')
 | ||
|                 ->paginate([
 | ||
|                     'list_rows' => $per
 | ||
|                 ], false);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //添加,$w_h图片尺寸大小,单位像素,只对type=img时有效
 | ||
|     public static function add($file, $src, $md5, $type = 'image')
 | ||
|     {
 | ||
|         $realPath = public_path().ltrim($src, '/');
 | ||
|         $oss      = false;
 | ||
|         if (is_file($realPath) && $type == 'image') {
 | ||
|             $img = Image::open($realPath);
 | ||
|             list($w, $h) = $img->size();
 | ||
|             $w_h = $w.'px * '.$h.'px';
 | ||
|         } else {
 | ||
|             $w_h = '';
 | ||
|         }
 | ||
| 
 | ||
|         $now = date('Y-m-d H:i:s');
 | ||
|         Attachment::pathDirHandle($src);
 | ||
| 
 | ||
|         Config::load('extra/base', 'base');
 | ||
|         $baseConfig = config('base');
 | ||
|         if (isset($baseConfig['oss']) && $baseConfig['oss'] == 'true') {
 | ||
|             $ossObject = AliOss::instance();
 | ||
|             try {
 | ||
|                 $pathInfo = pathinfo($src);
 | ||
| 
 | ||
|                 $ossConfig = AliOss::config();
 | ||
|                 $bucket = $ossConfig['bucket'];
 | ||
|                 //是否存在
 | ||
|                 if (!$ossObject->doesObjectExist($bucket, ltrim($src, '/'))) {
 | ||
|                     //创建目录
 | ||
|                     $ossObject->createObjectDir($bucket, ltrim($pathInfo['dirname'], '/'));
 | ||
| 
 | ||
|                     $ossObject->uploadFile($bucket, ltrim($src, '/'), $realPath);
 | ||
|                 }
 | ||
|                 $oss = true;
 | ||
|             } catch (Exception $e) {
 | ||
|                 \think\facade\Log::error('阿里云OSS上传文件失败 '.$e->getMessage());
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         // 将src中路径创建
 | ||
|         return self::create([
 | ||
|             'type'       => $type,
 | ||
|             'name'       => $file->getOriginalName(),
 | ||
|             'md5'        => $md5,
 | ||
|             'src'        => $src,
 | ||
|             'path'       => isset(pathinfo($src)['dirname']) ? pathinfo($src)['dirname'].'/' : '',
 | ||
|             'size'       => $file->getSize(),
 | ||
|             'suffix'     => $file->getOriginalExtension(),
 | ||
|             'mime_type'  => $file->getOriginalMime(),
 | ||
|             'created_at' => $now,
 | ||
|             'updated_at' => $now,
 | ||
|             'is_oss'     => $oss,
 | ||
|             'w_h'        => $w_h
 | ||
|         ]);
 | ||
|     }
 | ||
| 
 | ||
|     //获取所有记录
 | ||
|     public static function getAll()
 | ||
|     {
 | ||
|         return self::select()->toArray();
 | ||
|     }
 | ||
| }
 |