ResourceService.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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\Storage;
  16. use Illuminate\Support\Str;
  17. use Jiannei\Response\Laravel\Support\Facades\Response;
  18. class ResourceService
  19. {
  20. public $allowed_img_ext = ["png", "jpg", "gif", 'jpeg'];
  21. public $allowed_file_ext = ["doc", 'docx', "xls", "pdf", 'xlsx', 'mp4', 'webvtt', 'vtt', "png", "jpg", "gif", 'jpeg'];
  22. private $repository;
  23. /**
  24. * UserService constructor.
  25. *
  26. * @param ResourceRepositoryEloquent $repository
  27. */
  28. public function __construct(ResourceRepository $repository)
  29. {
  30. $this->repository = $repository;
  31. }
  32. public function handleUpload(Request $request)
  33. {
  34. $disk = 'public';
  35. // 获取上传的文件
  36. $file = $request->file('file');
  37. if (!$file->isFile()) return false;
  38. $type = $request->get('file_type', 'img');
  39. if ($type === 'img') {
  40. // 如果上传的不是图片将终止操作
  41. if (!in_array(strtolower($file->getClientOriginalExtension()), $this->allowed_img_ext)) {
  42. return false;
  43. }
  44. } else {
  45. if (!in_array(strtolower($file->getClientOriginalExtension()), $this->allowed_file_ext)) {
  46. return false;
  47. }
  48. }
  49. $type = $request->get('type', 'default');
  50. $dir = 'resource';
  51. switch ($type) {
  52. case 'headimg':
  53. $dir = 'headimg';
  54. break;
  55. case 'course_thumb':
  56. $dir = 'course_thumb';
  57. break;
  58. case 'course_video':
  59. $dir = 'course_video';
  60. break;
  61. case 'course_video_subtitle_zh':
  62. $dir = 'course_video_subtitle_zh';
  63. break;
  64. case 'course_video_subtitle_en':
  65. $dir = 'course_video_subtitle_en';
  66. break;
  67. case 'course_attach':
  68. $dir = 'course_attach';
  69. break;
  70. case 'organizations':
  71. $dir = 'organizations';
  72. break;
  73. case 'information':
  74. $dir = 'information';
  75. break;
  76. case 'banners':
  77. $dir = 'banners';
  78. break;
  79. case 'medical_record':
  80. $dir = 'medical_record';
  81. break;
  82. case 'user_headimg':
  83. $dir = 'user_headimg';
  84. break;
  85. case 'import_students':
  86. $dir = 'import_students';
  87. break;
  88. case 'import_drugs':
  89. $dir = 'import_drugs';
  90. break;
  91. case 'import_prescriptons':
  92. $dir = 'import_prescriptons';
  93. break;
  94. // case 'banners':
  95. // $dir = 'banners';
  96. // break;
  97. case 'article':
  98. $dir = 'articles';
  99. break;
  100. case 'cms_setting':
  101. $dir = 'cms_setting';
  102. break;
  103. case 'point':
  104. $dir = 'point';
  105. break;
  106. }
  107. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  108. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  109. $url = Storage::disk($disk)->url($path);
  110. $resource = $this->repository->insertResource($path, $newName, $file->getClientOriginalName(), $url, $file->getSize());
  111. return $resource;
  112. }
  113. /**
  114. * 上传文件
  115. * @param Request $request
  116. * @param string $dir
  117. * @param array $allow_ext
  118. * @return
  119. * Author: Mead
  120. */
  121. public function upload(Request $request, $dir = '', $allow_ext = [])
  122. {
  123. $disk = 'public';
  124. // 获取上传的文件
  125. $file = $request->file('file');
  126. if (!$file->isFile()) return Response::fail('请上传文件类型', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);;
  127. if (!in_array($file->getClientOriginalExtension(), $allow_ext)) {
  128. return Response::fail('上传文件的类型不对', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);
  129. }
  130. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  131. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  132. return [
  133. 'path' => $path,
  134. 'name' => $newName,
  135. 'original_name' => $file->getClientOriginalName(),
  136. 'disk' => $disk,
  137. ];
  138. }
  139. }