diff --git a/app/admin/controller/v1/Upload.php b/app/admin/controller/v1/Upload.php index 2a3c5cdb..f75d171f 100644 --- a/app/admin/controller/v1/Upload.php +++ b/app/admin/controller/v1/Upload.php @@ -5,6 +5,7 @@ namespace app\admin\controller\v1; use app\admin\model\v1\SysImageUploadRecordModel; use app\admin\model\v1\SysVideoUploadRecordModel; +use app\admin\model\v1\SysAttachmentUploadRecordModel; use Intervention\Image\ImageManager; use think\facade\Filesystem; @@ -135,4 +136,55 @@ class Upload return error('上传失败'); } + + /** + * 附件上传 + */ + public function attachment() + { + $file = request()->file('attachment'); + if (is_null($file)) { + return error('请确定上传对象或字段是否正确'); + } + + try { + $validate = validate([ + 'attachment' => 'fileSize:104857600|fileExt:zip,rar,7z,doc,docx,xls,xlsx,csv,ppt,pptx,pdf,txt' + ]); + if (!$validate->check(['attachment' => $file])) { + return error($validate->getError()); + } + + $filemd5 = $file->md5(); + $filesha1 = $file->sha1(); + + $attachment = SysAttachmentUploadRecordModel::md5($filemd5)->find(); + if (is_null($attachment)) { + $filename = Filesystem::disk('public')->putFile('attachments', $file); + + // 保存视频 + $attachment = new SysAttachmentUploadRecordModel(); + $attachment->language_id = request()->lang_id; + $attachment->attachment_path = $filename; + $attachment->file_size = $file->getSize(); + $attachment->file_type = $file->getOriginalMime(); + $attachment->file_md5 = $filemd5; + $attachment->file_sha1 = $filesha1; + if (!$attachment->save()) { + return error('上传失败'); + } + } + + $storage = config('filesystem.disks.public.url'); + return success('上传成功', [ + 'path' => $storage . '/' . $attachment->attachment_path, + 'file_md5' => $attachment->file_md5, + 'file_sha1' => $attachment->file_sha1 + ]); + } catch (\Throwable $th) { + return error($th->getMessage()); + } + + return error('上传失败'); + } } diff --git a/app/admin/model/v1/SysAttachmentUploadRecordModel.php b/app/admin/model/v1/SysAttachmentUploadRecordModel.php new file mode 100644 index 00000000..0cc6512d --- /dev/null +++ b/app/admin/model/v1/SysAttachmentUploadRecordModel.php @@ -0,0 +1,19 @@ +where('file_md5', '=', $md5); + } +} diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index ea56e1d9..0d38c8af 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -277,6 +277,9 @@ Route::group('v1', function () { // 附件(下载管理) Route::group('attachment', function () { + // 附件(下载管理)上传 + Route::post('/upload', 'Upload/attachment'); + // 附件(下载管理)列表 Route::get('index', 'Attachment/index'); diff --git a/app/common/model/SysAttachmentUploadRecordBaseModel.php b/app/common/model/SysAttachmentUploadRecordBaseModel.php new file mode 100644 index 00000000..8b045cd0 --- /dev/null +++ b/app/common/model/SysAttachmentUploadRecordBaseModel.php @@ -0,0 +1,33 @@ + 'int', + 'language_id' => 'int', + 'module' => 'string', + 'attachment_path' => 'string', + 'file_size' => 'int', + 'file_type' => 'string', + 'file_md5' => 'string', + 'file_sha1' => 'string', + 'created_at' => 'datetime', + 'deleted_at' => 'datetime', + ]; +} diff --git a/database/migrations/20250228061602_create_sys_attachment_upload_record.php b/database/migrations/20250228061602_create_sys_attachment_upload_record.php new file mode 100644 index 00000000..c0078dfc --- /dev/null +++ b/database/migrations/20250228061602_create_sys_attachment_upload_record.php @@ -0,0 +1,42 @@ +table('sys_attachment_upload_record', ['engine' => 'MyISAM', 'comment' => '附件上传表']); + $table->addColumn('language_id', 'integer', ['signed' => false, 'null' => false, 'comment' => '语言ID']) + ->addColumn('attachment_path', 'string', ['limit' => 125, 'null' => false, 'comment' => '附件路径']) + ->addColumn('file_size', 'integer', ['null' => false, 'comment' => '附件大小']) + ->addColumn('file_type', 'string', ['limit' => 125, 'null' => false, 'comment' => '附件类型']) + ->addColumn('file_md5', 'string', ['limit' => 32, 'null' => false, 'comment' => '附件md5值']) + ->addColumn('file_sha1', 'string', ['limit' => 40, 'null' => false, 'comment' => '附件sha1值']) + ->addColumn('created_at', 'timestamp', ['null' => false, 'default' => 'CURRENT_TIMESTAMP', 'comment' => '创建时间']) + ->addColumn('deleted_at', 'timestamp', ['null' => true, 'comment' => '删除时间']) + ->create(); + } +}