caipan_shop_admin/app/model/File.php

130 lines
3.8 KiB
PHP
Executable File
Raw Permalink 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 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();
}
}