ResourceService.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /*
  3. * This file is part of the Jiannei/lumen-api-starter.
  4. *
  5. * (c) Jiannei <longjian.huang@foxmail.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Services;
  11. use App\Contracts\Repositories\ResourceRepository;
  12. use App\Repositories\Eloquent\ResourceRepositoryEloquent;
  13. use App\Repositories\Enums\ResponseCodeEnum;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Log;
  16. use Illuminate\Support\Facades\Storage;
  17. use Illuminate\Support\Str;
  18. use Illuminate\Validation\ValidationException;
  19. use Jiannei\Enum\Laravel\Repositories\Enums\HttpStatusCodeEnum;
  20. use Jiannei\Response\Laravel\Support\Facades\Response;
  21. class ResourceService
  22. {
  23. public $allowed_img_ext = ["png", "jpg", "gif", 'jpeg'];
  24. public $allowed_file_ext = ["doc", 'docx', "xls", "pdf", 'xlsx', 'mp4', 'webvtt', 'vtt'];
  25. private $repository;
  26. /**
  27. * UserService constructor.
  28. *
  29. * @param ResourceRepositoryEloquent $repository
  30. */
  31. public function __construct(ResourceRepository $repository)
  32. {
  33. $this->repository = $repository;
  34. }
  35. public function handleUpload(Request $request)
  36. {
  37. $disk = 'public';
  38. // 获取上传的文件
  39. $file = $request->file('file');
  40. if (!$file->isFile()) return false;
  41. $type = $request->get('file_type', 'img');
  42. if ($type === 'img') {
  43. // 如果上传的不是图片将终止操作
  44. if (!in_array(strtolower($file->getClientOriginalExtension()), $this->allowed_img_ext)) {
  45. return false;
  46. }
  47. } else {
  48. if (!in_array(strtolower($file->getClientOriginalExtension()), $this->allowed_file_ext)) {
  49. return false;
  50. }
  51. }
  52. $type = $request->get('type', 'default');
  53. $dir = 'resource';
  54. $disk = 'qiniu';
  55. switch ($type) {
  56. case 'course':
  57. $dir = 'course';
  58. break;
  59. case 'course_video':
  60. $disk = 'qiniu';
  61. $dir = 'course_video';
  62. break;
  63. case 'course_video_subtitle_zh':
  64. $dir = 'course_video_subtitle_zh';
  65. break;
  66. case 'course_video_subtitle_en':
  67. $dir = 'course_video_subtitle_en';
  68. break;
  69. case 'attach':
  70. $dir = 'course_attach';
  71. break;
  72. case 'medical_record':
  73. $dir = 'medical_record';
  74. break;
  75. case 'user_headimg':
  76. $dir = 'user_headimg';
  77. break;
  78. case 'import_students':
  79. $dir = 'import_students';
  80. break;
  81. case 'import_drugs':
  82. $dir = 'import_drugs';
  83. break;
  84. case 'import_prescriptons':
  85. $dir = 'import_prescriptons';
  86. break;
  87. case 'banners':
  88. $dir = 'banners';
  89. break;
  90. case 'article':
  91. $dir = 'articles';
  92. break;
  93. case 'cms_setting':
  94. $dir = 'cms_setting';
  95. break;
  96. }
  97. try {
  98. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  99. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  100. $url = Storage::disk($disk)->url($path);
  101. $resource = $this->repository->insertResource($path, $newName, $file->getClientOriginalName(), $url, $file->getSize(), $disk);
  102. } catch (\Exception $exception) {
  103. Log::error($exception);
  104. }
  105. return $resource;
  106. }
  107. /**
  108. * 上传文件
  109. * @param Request $request
  110. * @param string $dir
  111. * @param array $allow_ext
  112. * @return
  113. * Author: Mead
  114. */
  115. public function upload(Request $request, $dir = '', $allow_ext = [])
  116. {
  117. $disk = 'public';
  118. // 获取上传的文件
  119. $file = $request->file('file');
  120. if (!$file->isFile()) return Response::fail('请上传文件类型', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);;
  121. if (!in_array($file->getClientOriginalExtension(), $allow_ext)) {
  122. return Response::fail('上传文件的类型不对', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);
  123. }
  124. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  125. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  126. return [
  127. 'path' => $path,
  128. 'name' => $newName,
  129. 'original_name' => $file->getClientOriginalName(),
  130. 'disk' => $disk,
  131. ];
  132. }
  133. }