FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0) - 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION - vendor/示例资源已gitignore
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
<?php
|
||||
|
||||
namespace plugin\control\expose\trait;
|
||||
|
||||
use app\expose\enum\Filesystem;
|
||||
use app\expose\helper\Config;
|
||||
use app\model\Uploads as ModelUploads;
|
||||
use app\model\UploadsClassify;
|
||||
use plugin\control\expose\helper\Uploads as HelperUploads;
|
||||
use Shopwwi\WebmanFilesystem\Storage;
|
||||
use Shopwwi\WebmanFilesystem\FilesystemFactory;
|
||||
use support\Log;
|
||||
use support\Request;
|
||||
|
||||
trait Uploads
|
||||
{
|
||||
protected $channels_uid;
|
||||
protected $admin_uid;
|
||||
protected $uid;
|
||||
public function getList(Request $request)
|
||||
{
|
||||
$limit = $request->get('limit', 10);
|
||||
$dir_name = $request->get('dir_name', 'all');
|
||||
$where = [];
|
||||
$where[] = ['u.channels_uid', '=', $this->channels_uid];
|
||||
if ($dir_name != 'all') {
|
||||
$where[] = ['c.dir_name', '=', $dir_name];
|
||||
}
|
||||
$accept = $request->get('accept');
|
||||
if ($accept) {
|
||||
# 判断是否包含*号
|
||||
if (strpos($accept, '*') !== false) {
|
||||
$accept = str_replace('*', '', $accept);
|
||||
$where[] = ['u.mime', 'like', "%{$accept}%"];
|
||||
} elseif (strpos($accept, '.') !== false) {
|
||||
$accept = str_replace('.', '', $accept);
|
||||
if (strpos($accept, ',') !== false) {
|
||||
$accept = explode(',', $accept);
|
||||
$where[] = ['u.ext', 'in', $accept];
|
||||
} else {
|
||||
$where[] = ['u.ext', '=', $accept];
|
||||
}
|
||||
} else {
|
||||
$where[] = ['u.mime', 'in', explode(',', $accept)];
|
||||
}
|
||||
}
|
||||
if ($this->uid) {
|
||||
$where[] = ['u.uid', '=', $this->uid];
|
||||
}
|
||||
if ($this->admin_uid) {
|
||||
$where[] = ['u.admin_uid', '=', $this->admin_uid];
|
||||
}
|
||||
$ModelUploads = ModelUploads::alias('u')->where($where)
|
||||
->join('uploads_classify c', 'u.classify_id=c.id')
|
||||
->field('u.*,c.title as classify_title')
|
||||
->order('u.id desc')
|
||||
->paginate($limit)->each(function ($item) {
|
||||
$item->url = HelperUploads::url($item->channels_uid, $item->path);
|
||||
return $item;
|
||||
});
|
||||
return $this->resData($ModelUploads);
|
||||
}
|
||||
public function upload(Request $request)
|
||||
{
|
||||
$dir_name = $request->post('dir_name');
|
||||
$dir_title = $request->post('dir_title');
|
||||
$config = new Config('filesystem', '', $this->channels_uid);
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => $dir_name, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => 'uploads/default', 'is_system' => 1, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
if (empty($dir_title)) {
|
||||
return $this->fail('分类不存在');
|
||||
}
|
||||
$UploadsClassify = new UploadsClassify;
|
||||
$UploadsClassify->title = $dir_title;
|
||||
$UploadsClassify->dir_name = $dir_name;
|
||||
$UploadsClassify->channels = $config->default;
|
||||
$UploadsClassify->channels_uid = $this->channels_uid;
|
||||
$UploadsClassify->save();
|
||||
}
|
||||
}
|
||||
$channels = $request->post('channels');
|
||||
if (!$channels) {
|
||||
$channels = $UploadsClassify->channels;
|
||||
}
|
||||
$date_path = date('Ymd');
|
||||
//单文件上传
|
||||
$file = $request->file('file');
|
||||
try {
|
||||
$Storage = new Storage($config->toArray());
|
||||
$result = $Storage->adapter($channels)->path($dir_name . '/' . $date_path)->upload($file);
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
try {
|
||||
$Uploads = new ModelUploads;
|
||||
$Uploads->uid = $this->uid;
|
||||
$Uploads->admin_uid = $this->admin_uid;
|
||||
$Uploads->classify_id = $UploadsClassify->id;
|
||||
$Uploads->filename = $result->origin_name;
|
||||
$Uploads->path = $result->file_name;
|
||||
$Uploads->ext = $result->extension;
|
||||
$Uploads->mime = $result->mime_type;
|
||||
$Uploads->size = $result->size;
|
||||
$Uploads->channels = $channels;
|
||||
$Uploads->channels_uid = $this->channels_uid;
|
||||
$Uploads->save();
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
return $this->resData([
|
||||
'id' => $Uploads->id,
|
||||
'url' => $result->file_url,
|
||||
'path' => $result->file_name,
|
||||
'mime' => $result->mime_type,
|
||||
'dir_name' => $dir_name
|
||||
]);
|
||||
}
|
||||
public function uploads(Request $request)
|
||||
{
|
||||
$dir_name = $request->post('dir_name');
|
||||
$dir_title = $request->post('dir_title');
|
||||
$config = new Config('filesystem', '', $this->channels_uid);
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => $dir_name, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => 'uploads/default', 'is_system' => 1, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
if (empty($dir_title)) {
|
||||
return $this->fail('分类不存在');
|
||||
}
|
||||
$UploadsClassify = new UploadsClassify;
|
||||
$UploadsClassify->title = $dir_title;
|
||||
$UploadsClassify->dir_name = $dir_name;
|
||||
$UploadsClassify->channels = $config->default;
|
||||
$UploadsClassify->channels_uid = $this->channels_uid;
|
||||
$UploadsClassify->save();
|
||||
}
|
||||
}
|
||||
$channels = $request->post('channels');
|
||||
if (!$channels) {
|
||||
$channels = $UploadsClassify->channels;
|
||||
}
|
||||
$date_path = date('Ymd');
|
||||
$files = $request->file();
|
||||
try {
|
||||
$Storage = new Storage($config->toArray());
|
||||
$results = $Storage->adapter($channels)->path($dir_name . '/' . $date_path)->uploads($files);
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
$resData = [];
|
||||
try {
|
||||
foreach ($results as $result) {
|
||||
$Uploads = new ModelUploads;
|
||||
$Uploads->uid = $this->uid;
|
||||
$Uploads->admin_uid = $this->admin_uid;
|
||||
$Uploads->classify_id = $UploadsClassify->id;
|
||||
$Uploads->filename = $result->origin_name;
|
||||
$Uploads->path = $result->file_name;
|
||||
$Uploads->ext = $result->extension;
|
||||
$Uploads->mime = $result->mime_type;
|
||||
$Uploads->size = $result->size;
|
||||
$Uploads->channels = $channels;
|
||||
$Uploads->channels_uid = $this->channels_uid;
|
||||
$Uploads->save();
|
||||
$resData[] = [
|
||||
'id' => $Uploads->id,
|
||||
'url' => $result->file_url,
|
||||
'path' => $result->file_name,
|
||||
'mime' => $result->mime_type,
|
||||
'dir_name' => $dir_name
|
||||
];
|
||||
}
|
||||
} catch (\Throwable $th) {
|
||||
return $this->exception($th);
|
||||
}
|
||||
return $this->resData($resData);
|
||||
}
|
||||
public function deleteUploads(Request $request)
|
||||
{
|
||||
$ids = $request->post('ids');
|
||||
$data = ModelUploads::whereIn('id', $ids)->where('channels_uid', $this->channels_uid)->select();
|
||||
$config = new Config('filesystem', '', $this->channels_uid);
|
||||
foreach ($data as $item) {
|
||||
if ($item->uid != $this->uid && $item->admin_uid != $this->admin_uid) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
$filesystem = FilesystemFactory::get($item->channels, $config->toArray());
|
||||
$filesystem->delete($item->path);
|
||||
} catch (\Throwable $th) {
|
||||
Log::error('删除文件"' . $item->path . '"失败:' . $th->getMessage(), $th->getTrace());
|
||||
}
|
||||
$item->delete();
|
||||
}
|
||||
return $this->success('删除成功');
|
||||
}
|
||||
public function updateUploads(Request $request)
|
||||
{
|
||||
$ids = $request->post('ids');
|
||||
$dir_name = $request->post('dir_name');
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => $dir_name, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
return $this->fail('分类不存在');
|
||||
}
|
||||
$data = ModelUploads::whereIn('id', $ids)->where('channels_uid', $this->channels_uid)->select();
|
||||
foreach ($data as $item) {
|
||||
if ($item->uid != $this->uid && $item->admin_uid != $this->admin_uid) {
|
||||
continue;
|
||||
}
|
||||
$item->classify_id = $UploadsClassify->id;
|
||||
$item->save();
|
||||
}
|
||||
return $this->success('修改成功');
|
||||
}
|
||||
public function getUploadClassify(Request $request)
|
||||
{
|
||||
$config = new Config('filesystem', '', $this->channels_uid);
|
||||
if (!UploadsClassify::where(['dir_name' => 'uploads/default', 'is_system' => 1, 'channels_uid' => $this->channels_uid])->count()) {
|
||||
$UploadsClassify = new UploadsClassify;
|
||||
$UploadsClassify->title = '默认分类';
|
||||
$UploadsClassify->dir_name = 'uploads/default';
|
||||
$UploadsClassify->channels = $config->default;
|
||||
$UploadsClassify->channels_uid = $this->channels_uid;
|
||||
$UploadsClassify->sort = 0;
|
||||
$UploadsClassify->is_system = 1;
|
||||
$UploadsClassify->save();
|
||||
}
|
||||
$UploadsClassify = UploadsClassify::where(['channels_uid' => $this->channels_uid])->order('sort asc,id asc')->select()->toArray();
|
||||
$all = [
|
||||
'title' => '全部',
|
||||
'dir_name' => 'all',
|
||||
'is_system' => 1,
|
||||
];
|
||||
array_unshift($UploadsClassify, $all);
|
||||
return $this->resData($UploadsClassify);
|
||||
}
|
||||
public function saveClassify(Request $request)
|
||||
{
|
||||
$data = $request->post();
|
||||
if (empty($data['title'])) {
|
||||
return $this->fail('标题不能为空');
|
||||
}
|
||||
if (empty($data['channels'])) {
|
||||
return $this->fail('请选择储存渠道');
|
||||
}
|
||||
if (empty($data['dir_name'])) {
|
||||
return $this->fail('目录名不能为空');
|
||||
}
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => $data['dir_name'], 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
$UploadsClassify = new UploadsClassify;
|
||||
$UploadsClassify->dir_name = 'uploads/' . $data['dir_name'];
|
||||
$UploadsClassify->channels_uid = $this->channels_uid;
|
||||
}
|
||||
$UploadsClassify->title = $data['title'];
|
||||
$UploadsClassify->channels = $data['channels'];
|
||||
if (!empty($data['sort'])) {
|
||||
$UploadsClassify->sort = $data['sort'];
|
||||
}
|
||||
if ($UploadsClassify->save()) {
|
||||
return $this->success('创建成功');
|
||||
} else {
|
||||
return $this->fail('创建失败');
|
||||
}
|
||||
}
|
||||
public function deleteClassify(Request $request)
|
||||
{
|
||||
$dir_name = $request->post('dir_name');
|
||||
if (empty($dir_name)) {
|
||||
return $this->fail('目录名不能为空');
|
||||
}
|
||||
if ($dir_name == 'all') {
|
||||
return $this->fail('全部目录不能删除');
|
||||
}
|
||||
$UploadsClassify = UploadsClassify::where(['dir_name' => $dir_name, 'channels_uid' => $this->channels_uid])->find();
|
||||
if (!$UploadsClassify) {
|
||||
return $this->fail('目录不存在');
|
||||
}
|
||||
if ($UploadsClassify->is_system) {
|
||||
return $this->fail('系统分类,无法删除');
|
||||
}
|
||||
if (ModelUploads::where(['classify_id' => $UploadsClassify->id])->count() > 0) {
|
||||
return $this->fail('目录分类下有文件不能删除');
|
||||
}
|
||||
if ($UploadsClassify->delete()) {
|
||||
return $this->success('删除成功');
|
||||
} else {
|
||||
return $this->fail('删除失败');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user