building-sign/app/model/File.php

168 lines
5.8 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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();
}
}