Files

182 lines
6.1 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
namespace ywxapp\controller;
use ywxapp\model\Attachment;
use ywxapp\service\FileStorageService;
/**
* UeditorPlus 类
*
* @author ywxapp <admin@ywxapp.cn>
*/
class UeditorPlus
{
private $user;
public function __construct()
{
if (app('auth')) {
$this->user = app()->auth->info;
}
}
/**
* 获取配置 config
* GET action config 请求动作名称
*/
public function config()
{
return json(config('ueditor-plus'));
}
/**
* 上传图片 image
* GET action image 请求动作名称,可通过 imageActionName 配置修改名称
* FILE file file 上传的文件,文件表单名称可通过 imageFieldName 配置修改名称
*return { "state":"SUCCESS", "url":"upload/demo.jpg", "title":"demo.jpg", "original":"demo.jpg"; }
*/
public function image()
{
$file = request()->file('file');
// return json(['data'=> app()->auth->info]);
try {
$storage = new FileStorageService();
$data = $storage->upload($file, 'images');
$info = $this->toSaveData($data);
return json([
'mime' => $data['mime'],
"state" => "SUCCESS",
"url" => $info->url,
"title" => $info->name,
"original" => $info->original,
]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
/**
* 图片抓取 catch
* GET action catch 请求动作名称,可通过 catcherActionName 配置修改名称
* POST source url 抓取的图片地址,文件表单名称可通过 catcherFieldName 配置修改名称
*/
public function catch ()
{
$file = request()->file('file');
try {
// 实例化上传服务
$storage = new FileStorageService();
// 执行上传
// 这里的逻辑不需要关心具体是上传到哪里,由配置决定
$result = $storage->upload($file, 'avatar/' . date('Ymd'));
return json(['code' => 0, 'msg' => '上传成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
/**
* 视频上传 video
* GET action video 请求动作名称,可通过 videoActionName 配置修改名称
* FILE file file 上传的文件,文件表单名称可通过 videoFieldName 配置修改名称
*/
public function video()
{
$file = request()->file('file');
$data = [
'size' => $file->getSize(),
'Mime' => $file->getOriginalMime(),
];
return json(['code' => 0, 'msg' => '上传成功', 'data' => $data]);
try {
// 实例化上传服务
$storage = new FileStorageService();
// 执行上传
// 这里的逻辑不需要关心具体是上传到哪里,由配置决定
$result = $storage->upload($file, 'avatar/' . date('Ymd'));
return json(['code' => 0, 'msg' => '上传成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
/**
* 文件上传 file
* GET action file 请求动作名称,可通过 fileActionName 配置修改名称
* FILE file file 上传的文件,文件表单名称可通过 fileFieldName 配置修改名称
*/
public function file()
{
$file = request()->file('file');
try {
// 实例化上传服务
$storage = new FileStorageService();
// 执行上传
// 这里的逻辑不需要关心具体是上传到哪里,由配置决定
$result = $storage->upload($file, 'avatar/' . date('Ymd'));
return json(['code' => 0, 'msg' => '上传成功', 'data' => $result]);
} catch (\Exception $e) {
return json(['code' => 1, 'msg' => $e->getMessage()]);
}
}
/**
* 图片列表 listImage
* GET action listImage 请求动作名称,可通过 imageManagerActionName 配置修改名称
*/
public function listImage()
{
try {
$user = app()->auth->info;
$datas = Attachment::where('uid', $user->uid)->where('mime', 'like', 'image%')->field('name,url')->select();
return json([
"state" => "SUCCESS",
"list" => $datas,
"start" => 0,
"total" => count($datas),
]);
} catch (\Exception $e) {
// 记录日志,但不要因为入库失败而中断上传流程(或者根据需求决定)
\think\facade\Log::error( $e->getMessage());
}
}
/**
* 文件列表 listFile
* GET action listFile 请求动作名称,可通过 fileManagerActionName 配置修改名称
*/
public function listFile()
{
}
/**
* 将文件信息保存到数据库
*/
protected function toSaveData(array $data, array $options = [])
{
try {
$user = app()->auth->info;
$data['uid'] = $user->uid; // 根据你的登录逻辑获取用户ID
$info = Attachment::create($data);
return $info;
} catch (\Exception $e) {
// 记录日志,但不要因为入库失败而中断上传流程(或者根据需求决定)
\think\facade\Log::error('文件记录入库失败: ' . $e->getMessage());
}
}
}