From 9b37570a78f78004fb61307ba690fd9351ebd733 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Tue, 13 Aug 2024 19:47:38 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E9=BB=98=E8=AE=A4=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=202.=E4=B8=8A=E4=BC=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B1=E8=B4=A5=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Admin/Controllers/UploadController.php | 14 +- app/Http/Admin/Services/Upload.php | 153 ++++++++++++++++++ app/Http/Admin/Views/setting/storage.volt | 4 + app/Services/MyStorage.php | 103 +----------- .../admin/img/default/article_cover.png | Bin 0 -> 15294 bytes 5 files changed, 172 insertions(+), 102 deletions(-) create mode 100644 app/Http/Admin/Services/Upload.php create mode 100644 public/static/admin/img/default/article_cover.png diff --git a/app/Http/Admin/Controllers/UploadController.php b/app/Http/Admin/Controllers/UploadController.php index 6c51b97e..432e5129 100644 --- a/app/Http/Admin/Controllers/UploadController.php +++ b/app/Http/Admin/Controllers/UploadController.php @@ -7,6 +7,7 @@ namespace App\Http\Admin\Controllers; +use App\Http\Admin\Services\Upload as UploadService; use App\Services\MyStorage as StorageService; use App\Services\Vod as VodService; use App\Validators\Validator as AppValidator; @@ -119,20 +120,25 @@ class UploadController extends Controller */ public function uploadDefaultImageAction() { - $service = new StorageService(); + $service = new UploadService(); $items = []; + $items['category_icon'] = $service->uploadDefaultCategoryIcon(); $items['user_avatar'] = $service->uploadDefaultUserAvatar(); + $items['article_cover'] = $service->uploadDefaultArticleCover(); $items['course_cover'] = $service->uploadDefaultCourseCover(); $items['package_cover'] = $service->uploadDefaultPackageCover(); $items['topic_cover'] = $service->uploadDefaultTopicCover(); + $items['slide_cover'] = $service->uploadDefaultSlideCover(); $items['gift_cover'] = $service->uploadDefaultGiftCover(); $items['vip_cover'] = $service->uploadDefaultVipCover(); - $items['category_icon'] = $service->uploadDefaultCategoryIcon(); - foreach ($items as $item) { - if (!$item) return $this->jsonError(['msg' => '上传文件失败']); + foreach ($items as $key => $item) { + $msg = sprintf('上传文件失败: %s', $key); + if (!$item) { + return $this->jsonError(['msg' => $msg]); + } } return $this->jsonSuccess(['msg' => '上传文件成功']); diff --git a/app/Http/Admin/Services/Upload.php b/app/Http/Admin/Services/Upload.php new file mode 100644 index 00000000..9fa53961 --- /dev/null +++ b/app/Http/Admin/Services/Upload.php @@ -0,0 +1,153 @@ +storage = new MyStorage(); + } + + /** + * 上传默认用户头像 + * + * @return false|mixed|string + */ + public function uploadDefaultUserAvatar() + { + $filename = static_path('admin/img/default/user_avatar.png'); + + $key = '/img/default/user_avatar.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认课程封面 + * + * @return false|mixed|string + */ + public function uploadDefaultCourseCover() + { + $filename = static_path('admin/img/default/course_cover.png'); + + $key = '/img/default/course_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认套餐封面 + * + * @return false|mixed|string + */ + public function uploadDefaultPackageCover() + { + $filename = static_path('admin/img/default/package_cover.png'); + + $key = '/img/default/package_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认话题封面 + * + * @return false|mixed|string + */ + public function uploadDefaultTopicCover() + { + $filename = static_path('admin/img/default/topic_cover.png'); + + $key = '/img/default/topic_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认会员封面 + * + * @return false|mixed|string + */ + public function uploadDefaultVipCover() + { + $filename = static_path('admin/img/default/vip_cover.png'); + + $key = '/img/default/vip_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认专栏封面 + * + * @return false|mixed|string + */ + public function uploadDefaultArticleCover() + { + $filename = static_path('admin/img/default/article_cover.png'); + + $key = '/img/default/article_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认礼品封面 + * + * @return false|mixed|string + */ + public function uploadDefaultGiftCover() + { + $filename = static_path('admin/img/default/gift_cover.png'); + + $key = '/img/default/gift_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认轮播图片 + * + * @return false|mixed|string + */ + public function uploadDefaultSlideCover() + { + $filename = static_path('admin/img/default/slide_cover.png'); + + $key = '/img/default/slide_cover.png'; + + return $this->storage->putFile($key, $filename); + } + + /** + * 上传默认分类图标 + * + * @return false|mixed|string + */ + public function uploadDefaultCategoryIcon() + { + $filename = static_path('admin/img/default/category_icon.png'); + + $key = '/img/default/category_icon.png'; + + return $this->storage->putFile($key, $filename); + } + + +} diff --git a/app/Http/Admin/Views/setting/storage.volt b/app/Http/Admin/Views/setting/storage.volt index fc7a574d..98b37f78 100644 --- a/app/Http/Admin/Views/setting/storage.volt +++ b/app/Http/Admin/Views/setting/storage.volt @@ -141,6 +141,10 @@ 礼品封面 public/static/admin/img/default/gift_cover.png + + 轮播封面 + public/static/admin/img/default/slide_cover.png + diff --git a/app/Services/MyStorage.php b/app/Services/MyStorage.php index 36c2f35c..c65c4237 100644 --- a/app/Services/MyStorage.php +++ b/app/Services/MyStorage.php @@ -11,6 +11,7 @@ use App\Library\Utils\FileInfo; use App\Models\Upload as UploadModel; use App\Repos\Upload as UploadRepo; use InvalidArgumentException; +use RuntimeException; class MyStorage extends Storage { @@ -36,104 +37,6 @@ class MyStorage extends Storage return $this->putString($key, $value); } - /** - * 上传默认用户头像 - * - * @return false|mixed|string - */ - public function uploadDefaultUserAvatar() - { - $filename = static_path('admin/img/default/user_avatar.png'); - - $key = '/img/default/user_avatar.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传默认课程封面 - * - * @return false|mixed|string - */ - public function uploadDefaultCourseCover() - { - $filename = static_path('admin/img/default/course_cover.png'); - - $key = '/img/default/course_cover.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传默认套餐封面 - * - * @return false|mixed|string - */ - public function uploadDefaultPackageCover() - { - $filename = static_path('admin/img/default/package_cover.png'); - - $key = '/img/default/package_cover.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传默认话题封面 - * - * @return false|mixed|string - */ - public function uploadDefaultTopicCover() - { - $filename = static_path('admin/img/default/topic_cover.png'); - - $key = '/img/default/topic_cover.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传默认会员封面 - * - * @return false|mixed|string - */ - public function uploadDefaultVipCover() - { - $filename = static_path('admin/img/default/vip_cover.png'); - - $key = '/img/default/vip_cover.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传默认礼品封面 - * - * @return false|mixed|string - */ - public function uploadDefaultGiftCover() - { - $filename = static_path('admin/img/default/gift_cover.png'); - - $key = '/img/default/gift_cover.png'; - - return $this->putFile($key, $filename); - } - - /** - * 上传分类默认图标 - * - * @return false|mixed|string - */ - public function uploadDefaultCategoryIcon() - { - $filename = static_path('admin/img/default/category_icon.png'); - - $key = '/img/default/category_icon.png'; - - return $this->putFile($key, $filename); - } - /** * 上传封面图片 * @@ -218,6 +121,10 @@ class MyStorage extends Storage $path = $this->putFile($keyName, $file->getTempName()); + if (!$path) { + throw new RuntimeException('Upload File Failed'); + } + $upload = new UploadModel(); $upload->name = $name; diff --git a/public/static/admin/img/default/article_cover.png b/public/static/admin/img/default/article_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..c09162618067cb6ae04486bba21c4e019b7072e6 GIT binary patch literal 15294 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