130 lines
3.8 KiB
PHP
130 lines
3.8 KiB
PHP
<?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();
|
||
}
|
||
}
|