building-sign/app/model/File.php

168 lines
5.8 KiB
PHP
Raw Normal View History

2023-01-09 08:41:41 +00:00
<?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();
}
}