128 lines
4.0 KiB
PHP
128 lines
4.0 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace plugin\admin\app\controller;
|
||
|
|
|
||
|
|
use support\Request;
|
||
|
|
use support\Response;
|
||
|
|
use support\think\Db;
|
||
|
|
use Shopwwi\WebmanFilesystem\Facade\Storage;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 附件管理
|
||
|
|
*
|
||
|
|
* @icon fa fa-circle-o
|
||
|
|
*/
|
||
|
|
class AttachmentController extends Crud
|
||
|
|
{
|
||
|
|
function list(Request $request)
|
||
|
|
{
|
||
|
|
|
||
|
|
return view('', [
|
||
|
|
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
function feupload(Request $request): Response
|
||
|
|
{
|
||
|
|
|
||
|
|
$file = current($request->file());
|
||
|
|
if (!$file || !$file->isValid()) {
|
||
|
|
return $this->fail('未找到文件');
|
||
|
|
}
|
||
|
|
$data = $this->base($request, '/upload/files/' . date('Ymd'));
|
||
|
|
return json([
|
||
|
|
'link' => $data['url'],
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
function upload(Request $request): Response
|
||
|
|
{
|
||
|
|
|
||
|
|
$file = current($request->file());
|
||
|
|
if (!$file || !$file->isValid()) {
|
||
|
|
return $this->fail('未找到文件');
|
||
|
|
}
|
||
|
|
$data = $this->base($request, '/upload/files/' . date('Ymd'));
|
||
|
|
//cp($data);
|
||
|
|
return $this->json(0, '上传成功', [
|
||
|
|
'url' => $data['realpath'],
|
||
|
|
'name' => $data['name'],
|
||
|
|
'fullurl' => $data['url'],
|
||
|
|
'size' => $data['size'],
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 获取上传数据
|
||
|
|
* @param Request $request
|
||
|
|
* @param $relative_dir
|
||
|
|
* @return array
|
||
|
|
* @throws \Exception
|
||
|
|
*/
|
||
|
|
protected function base(Request $request, $relative_dir): array
|
||
|
|
{
|
||
|
|
// 适配器 local默认是存储在runtime目录下 public默认是存储在public目录下
|
||
|
|
// 可访问的静态文件建议public
|
||
|
|
// 默认适配器是local
|
||
|
|
//Storage::adapter('public');
|
||
|
|
$relative_dir = ltrim($relative_dir, '\\/');
|
||
|
|
$file = current($request->file());
|
||
|
|
try {
|
||
|
|
if (!$file || !$file->isValid()) {
|
||
|
|
throw new \support\exception\BusinessException('未找到上传文件', 400);
|
||
|
|
}
|
||
|
|
|
||
|
|
$ext = $file->getUploadExtension() ?: null;
|
||
|
|
$mime_type = $file->getUploadMimeType();
|
||
|
|
$file_name = $file->getUploadName();
|
||
|
|
$file_size = $file->getSize();
|
||
|
|
|
||
|
|
if (!$ext && $file_name === 'blob') {
|
||
|
|
[$___image, $ext] = explode('/', $mime_type);
|
||
|
|
unset($___image);
|
||
|
|
}
|
||
|
|
|
||
|
|
$ext = strtolower($ext);
|
||
|
|
$ext_forbidden_map = ['php', 'php3', 'php5', 'css', 'js', 'html', 'htm', 'asp', 'jsp'];
|
||
|
|
if (in_array($ext, $ext_forbidden_map)) {
|
||
|
|
throw new \support\exception\BusinessException('不支持该格式的文件上传', 400);
|
||
|
|
}
|
||
|
|
$mimetype = explode(',',Config('site.mimetype'));
|
||
|
|
$result = Storage::adapter('public')
|
||
|
|
->path($relative_dir)
|
||
|
|
->size(1024 * 1024 * 5)
|
||
|
|
->extYes($mimetype)
|
||
|
|
//->extNo(['image/png'])
|
||
|
|
->upload($file);
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
return [
|
||
|
|
'code' => 1,
|
||
|
|
'msg' => $e->getMessage()
|
||
|
|
];
|
||
|
|
}
|
||
|
|
// cp($result);
|
||
|
|
// stdClass Object
|
||
|
|
// (
|
||
|
|
// [adapter] => public
|
||
|
|
// [origin_name] => OIP-C (1).jpg
|
||
|
|
// [file_name] => upload/files/20250527/eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76.jpg
|
||
|
|
// [storage_key] => eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76
|
||
|
|
// [file_url] => //luru.oss-ap-southeast-1.aliyuncs.com/upload/files/20250527/eb14c1bfe6e7a22415bbbb30dfe90ba1_6834f0974db76.jpg
|
||
|
|
// [size] => 15370
|
||
|
|
// [mime_type] => image/jpeg
|
||
|
|
// [extension] => jpg
|
||
|
|
// [file_height] => 474
|
||
|
|
// [file_width] => 474
|
||
|
|
// )
|
||
|
|
return [
|
||
|
|
'code' => 0,
|
||
|
|
'url' => $result->file_url,
|
||
|
|
'name' => $result->origin_name,
|
||
|
|
'realpath' => '/'.$result->file_name,
|
||
|
|
'size' => $result->size,
|
||
|
|
'mime_type' => $result->mime_type,
|
||
|
|
'image_with' => $result->file_width,
|
||
|
|
'image_height' => $result->file_height,
|
||
|
|
'ext' => $result->extension,
|
||
|
|
];
|
||
|
|
}
|
||
|
|
}
|