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