174 lines
4.8 KiB
PHP
174 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace app\controller;
|
|
|
|
use app\Service\UploadService;
|
|
use Webman\Http\Request;
|
|
use Webman\Http\Response;
|
|
|
|
/**
|
|
* 文件上传控制器
|
|
*/
|
|
class UploadController extends BaseController
|
|
{
|
|
private UploadService $uploadService;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->uploadService = new UploadService();
|
|
}
|
|
|
|
/**
|
|
* 通用文件上传接口
|
|
*/
|
|
public function upload(Request $request): Response
|
|
{
|
|
try {
|
|
$userId = $this->getUserId($request); // 可选,没有token则为null
|
|
$partition = $request->post('partition', 'other');
|
|
$category = $request->post('category', 'general');
|
|
|
|
$result = $this->uploadService->upload($request, $partition, $category, $userId);
|
|
|
|
return $this->success($result, '上传成功');
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 图片上传接口
|
|
*/
|
|
public function uploadImage(Request $request): Response
|
|
{
|
|
try {
|
|
$userId = $this->getUserId($request); // 可选,没有token则为null
|
|
$category = $request->post('category', 'general');
|
|
|
|
$result = $this->uploadService->uploadImage($request, $category, $userId);
|
|
|
|
return $this->success($result, '上传成功');
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 二手车图片上传接口
|
|
*/
|
|
public function uploadUsedCarImage(Request $request): Response
|
|
{
|
|
try {
|
|
$userId = $this->getUserId($request); // 可选,没有token则为null
|
|
|
|
$result = $this->uploadService->uploadUsedCarImage($request, $userId);
|
|
|
|
return $this->success($result, '上传成功');
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 批量上传图片(二手车专用)
|
|
*/
|
|
public function batchUploadImages(Request $request): Response
|
|
{
|
|
try {
|
|
$userId = $this->getUserId($request); // 可选,没有token则为null
|
|
$files = $request->files();
|
|
|
|
if (empty($files)) {
|
|
return $this->error('请选择要上传的文件');
|
|
}
|
|
|
|
$results = [];
|
|
$errors = [];
|
|
|
|
foreach ($files['files'] ?? [] as $index => $file) {
|
|
try {
|
|
// 创建临时请求对象处理单个文件
|
|
$tempRequest = new Request(
|
|
$request->method(),
|
|
$request->path(),
|
|
$request->headers(),
|
|
['file' => $file]
|
|
);
|
|
|
|
$result = $this->uploadService->uploadUsedCarImage($tempRequest, $userId);
|
|
$results[] = $result;
|
|
} catch (\Exception $e) {
|
|
$errors[] = [
|
|
'index' => $index,
|
|
'error' => $e->getMessage(),
|
|
];
|
|
}
|
|
}
|
|
|
|
return $this->success([
|
|
'success' => $results,
|
|
'errors' => $errors,
|
|
'total' => count($results),
|
|
'failed' => count($errors),
|
|
], '批量上传完成');
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 删除文件
|
|
*/
|
|
public function deleteFile(Request $request): Response
|
|
{
|
|
try {
|
|
$userId = $this->getUserId($request); // 可选,用于权限验证
|
|
$fileId = (int)$request->post('id');
|
|
|
|
if ($fileId <= 0) {
|
|
return $this->error('无效的文件ID');
|
|
}
|
|
|
|
$this->uploadService->deleteFile($fileId, $userId);
|
|
|
|
return $this->success(null, '删除成功');
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取文件信息
|
|
*/
|
|
public function getFileInfo(Request $request): Response
|
|
{
|
|
try {
|
|
$fileId = (int)$request->get('id');
|
|
|
|
if ($fileId <= 0) {
|
|
return $this->error('无效的文件ID');
|
|
}
|
|
|
|
$info = $this->uploadService->getFileInfo($fileId);
|
|
|
|
return $this->success($info);
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取分区配置
|
|
*/
|
|
public function getPartitionConfig(Request $request): Response
|
|
{
|
|
try {
|
|
$configs = UploadService::getPartitionConfigs();
|
|
|
|
return $this->success($configs);
|
|
} catch (\Exception $e) {
|
|
return $this->error($e->getMessage());
|
|
}
|
|
}
|
|
}
|