背景
在多租户的场景下,使用 dcat-admin 时,文件上传需要统一文件上传逻辑,将文件统一保存到租户目录下。
需要进行路由定义与上传逻辑定义。
示例如下。
路由
Route::any('files/upload', [FileController::class, 'upload']);
控制器
<?php
namespace App\AdminTenant\Controllers;
use Illuminate\Http\UploadedFile;
class FileController
{
use \Dcat\Admin\Traits\HasUploadedFile;
public function upload()
{
$disk = $this->disk('local');
// 判断是否是删除文件请求
if ($this->isDeleteRequest()) {
// 删除文件并响应
return $this->deleteFileAndResponse($disk);
}
// 获取上传的文件
/** @var UploadedFile */
$file = $this->file();
$type = str_contains($file->getClientMimeType(), 'image') ? 'image' : 'file';
$dir = sprintf('public/%s', config('admin-tenant.upload.directory.'.$type));
$newName = $file->hashName();
$result = $disk->putFileAs($dir, $file, $newName);
$path = str_replace(['public/'], '', "{$dir}/$newName");
return $result
? $this->responseUploaded($path, \URL::tenantFile($path))
: $this->responseErrorMessage('文件上传失败');
}
}