refactor: 上传相关优化

This commit is contained in:
2025-06-12 14:50:20 +08:00
parent 6bd988f257
commit 8f9e304294
2 changed files with 75 additions and 7 deletions

View File

@@ -42,9 +42,17 @@ class Upload
$filemd5 = $file->md5();
$filesha1 = $file->sha1();
$image_model = SysImageUploadRecordModel::md5($filemd5)->find();
// 获取图片上传配置
list(
'filename_keep' => $filename_keep,
'filemd5_unique' => $filemd5_unique
) = $this->getUploadOptions('upload_image');
// 是否需要根据文件MD5值检查文件是否已存在
$image_model = $filemd5_unique ? SysImageUploadRecordModel::md5($filemd5)->find() : null;
if (is_null($image_model)) {
$filename = Filesystem::disk('image')->putFile($param['module'], $file);
// 检查是否需要保留原文件名生成器
$name_rule = fn() => $filename_keep ? $this->filenameGenerator($file) : null;
$filename = Filesystem::disk('image')->putFile($param['module'], $file, $name_rule());
// 处理图片
$image_manager = ImageManager::imagick();
$image = $image_manager->read('.' . $storage . '/' . $filename);
@@ -146,6 +154,33 @@ class Upload
return error('上传失败');
}
/**
* 文件名生成回调
*
* @param \think\file\UploadedFile $file
* @return callable
*/
private function filenameGenerator(\think\file\UploadedFile $file): callable
{
return fn() => date('Ymd') . '/' . pathinfo($file->getOriginalName(), PATHINFO_FILENAME);
}
/**
* 获取上传配置
*
* @param string $module
* @return array
*/
private function getUploadOptions($module)
{
$config_model = new \app\admin\controller\v1\SiteConfig;
$config = $config_model->getByGroupUniqueLabel('upload');
$options = data_get($config, $module, []);
throw_if(empty($options), '上传配置错误');
return [
'filename_keep' => (int)data_get($options, 'filename_keep.value', 0) == 1,
'filemd5_unique' => (int)data_get($options, 'filemd5_unique.value', 0) == 1,
];
}
/**
* 获取水印配置
*
@@ -260,9 +295,17 @@ class Upload
$filemd5 = $file->md5();
$filesha1 = $file->sha1();
$video = SysVideoUploadRecordModel::md5($filemd5)->find();
// 获取视频上传配置
list(
'filename_keep' => $filename_keep,
'filemd5_unique' => $filemd5_unique
) = $this->getUploadOptions('upload_video');
// 是否需要根据文件MD5值检查文件是否已存在
$video = $filemd5_unique ? SysVideoUploadRecordModel::md5($filemd5)->find() : null;
if (is_null($video)) {
$filename = Filesystem::disk('video')->putFile($param['module'], $file);
// 检查是否需要保留原文件名
$name_rule = fn() => $filename_keep ? $this->filenameGenerator($file) : null;
$filename = Filesystem::disk('video')->putFile($param['module'], $file, $name_rule());
// 保存视频
$video = new SysVideoUploadRecordModel();
@@ -312,9 +355,17 @@ class Upload
$filemd5 = $file->md5();
$filesha1 = $file->sha1();
$attachment = SysAttachmentUploadRecordModel::md5($filemd5)->find();
// 获取视频上传配置
list(
'filename_keep' => $filename_keep,
'filemd5_unique' => $filemd5_unique
) = $this->getUploadOptions('upload_attachment');
// 是否需要根据文件MD5值检查文件是否已存在
$attachment = $filemd5_unique ? SysAttachmentUploadRecordModel::md5($filemd5)->find() : null;
if (is_null($attachment)) {
$filename = Filesystem::disk('public')->putFile('attachments', $file);
// 检查是否需要保留原文件名
$name_rule = fn() => $filename_keep ? $this->filenameGenerator($file) : null;
$filename = Filesystem::disk('public')->putFile('attachments', $file, $name_rule());
// 保存视频
$attachment = new SysAttachmentUploadRecordModel();