You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.7 KiB
84 lines
2.7 KiB
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\CourseMedia;
|
|
use App\Support\ApiResponse;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class UploadController extends Controller
|
|
{
|
|
use ApiResponse;
|
|
|
|
/** 课程封面 / 宣传页等图片上传,存 public 盘并写入 course_media */
|
|
public function courseAsset(Request $request): JsonResponse
|
|
{
|
|
$data = $request->validate([
|
|
'file' => ['required', 'file', 'image', 'max:5120'],
|
|
'subdir' => ['required', 'string', 'in:covers,promos'],
|
|
]);
|
|
|
|
$uploaded = $request->file('file');
|
|
$path = $uploaded->store("courses/{$data['subdir']}", 'public');
|
|
$url = CourseMedia::publicAssetUrl($path) ?? '';
|
|
|
|
$media = CourseMedia::query()->create([
|
|
'disk' => 'public',
|
|
'path' => $path,
|
|
'url' => $url,
|
|
'category' => $data['subdir'],
|
|
'original_name' => $uploaded->getClientOriginalName(),
|
|
'mime_type' => $uploaded->getClientMimeType(),
|
|
'size_bytes' => $uploaded->getSize() ?: null,
|
|
]);
|
|
|
|
return $this->ok($media->toApiArray(), '已上传');
|
|
}
|
|
|
|
/** 资讯封面图上传,存 public 盘并返回 URL */
|
|
public function newsCover(Request $request): JsonResponse
|
|
{
|
|
$data = $request->validate([
|
|
'file' => ['required', 'file', 'image', 'max:5120'],
|
|
]);
|
|
|
|
$uploaded = $request->file('file');
|
|
$path = $uploaded->store('news/covers', 'public');
|
|
$url = CourseMedia::publicAssetUrl($path) ?? '';
|
|
|
|
return $this->ok(['url' => $url], '已上传');
|
|
}
|
|
|
|
/** Banner 自定义封面图上传 */
|
|
public function bannerCover(Request $request): JsonResponse
|
|
{
|
|
$data = $request->validate([
|
|
'file' => ['required', 'file', 'image', 'max:5120'],
|
|
]);
|
|
|
|
$uploaded = $request->file('file');
|
|
$path = $uploaded->store('banners/covers', 'public');
|
|
$url = CourseMedia::publicAssetUrl($path) ?? '';
|
|
|
|
return $this->ok(['url' => $url], '已上传');
|
|
}
|
|
|
|
/** 富文本编辑器内嵌图片上传 */
|
|
public function editorImage(Request $request): JsonResponse
|
|
{
|
|
$data = $request->validate([
|
|
'file' => ['required', 'file', 'image', 'max:5120'],
|
|
'scope' => ['nullable', 'string', 'in:courses,activities,news,banners,common'],
|
|
]);
|
|
|
|
$scope = $data['scope'] ?? 'common';
|
|
$uploaded = $request->file('file');
|
|
$path = $uploaded->store("editor/{$scope}", 'public');
|
|
$url = CourseMedia::publicAssetUrl($path) ?? '';
|
|
|
|
return $this->ok(['url' => $url], '已上传');
|
|
}
|
|
}
|