168 lines
5.8 KiB
PHP
Executable File
168 lines
5.8 KiB
PHP
Executable File
<?php
|
||
|
||
namespace app\model;
|
||
|
||
use app\service\AliOss;
|
||
use Exception;
|
||
use Qiniu\Auth;
|
||
use Qiniu\Storage\UploadManager;
|
||
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());
|
||
// }
|
||
|
||
// 七牛
|
||
try {
|
||
Config::load('extra/qiniu', 'qiniu');
|
||
$conf = config('qiniu');
|
||
// 控制台获取密钥:https://portal.qiniu.com/user/key
|
||
$accessKey = $conf['qiniuAccessKey'] ?? '';
|
||
$secretKey = $conf['qiniuSecretKey'] ?? '';
|
||
$bucket = $conf['bucket'] ?? '';
|
||
|
||
// 构建鉴权对象
|
||
$auth = new Auth($accessKey, $secretKey);
|
||
// 生成上传 Token
|
||
$token = $auth->uploadToken($bucket);
|
||
// 要上传文件的本地路径
|
||
// $filePath = './php-logo.png';
|
||
$filePath = $realPath;
|
||
// 上传到七牛存储后保存的文件名
|
||
// $key = 'my-php-logo.png';
|
||
$key = ltrim($src, '/');
|
||
|
||
// 初始化 UploadManager 对象并进行文件的上传。
|
||
$uploadMgr = new UploadManager();
|
||
|
||
// 调用 UploadManager 的 putFile 方法进行文件的上传,该方法会判断文件大小,进而决定使用表单上传还是分片上传,无需手动配置。
|
||
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
|
||
if ($err !== null) {
|
||
\think\facade\Log::error('七牛云OSS上传文件失败 '.$err);
|
||
// var_dump($err);
|
||
} else {
|
||
// var_dump($ret);
|
||
}
|
||
} 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();
|
||
}
|
||
}
|