ResourceService.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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 Illuminate\Validation\ValidationException;
  18. use Jiannei\Enum\Laravel\Repositories\Enums\HttpStatusCodeEnum;
  19. use Jiannei\Response\Laravel\Support\Facades\Response;
  20. class ResourceService
  21. {
  22. public $allowed_img_ext = ["png", "jpg", "gif", 'jpeg'];
  23. public $allowed_file_ext = ["doc", 'docx', "xls", "pdf", 'xlsx', 'mp4', 'webvtt', 'vtt'];
  24. private $repository;
  25. /**
  26. * UserService constructor.
  27. *
  28. * @param ResourceRepositoryEloquent $repository
  29. */
  30. public function __construct(ResourceRepository $repository)
  31. {
  32. $this->repository = $repository;
  33. }
  34. public function handleUpload(Request $request)
  35. {
  36. $disk = 'public';
  37. // 获取上传的文件
  38. $file = $request->file('file');
  39. if (!$file->isFile()) return false;
  40. $type = $request->get('file_type', 'img');
  41. if ($type === 'img') {
  42. // 如果上传的不是图片将终止操作
  43. if (!in_array($file->getClientOriginalExtension(), $this->allowed_img_ext)) {
  44. return false;
  45. }
  46. } else {
  47. if (!in_array($file->getClientOriginalExtension(), $this->allowed_file_ext)) {
  48. return false;
  49. }
  50. }
  51. $type = $request->get('type', 'default');
  52. $dir = 'resource';
  53. switch ($type) {
  54. case 'user_headimg':
  55. $dir = 'user_headimg';
  56. break;
  57. case 'import_orders':
  58. $dir = 'import_orders';
  59. break;
  60. }
  61. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  62. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  63. $url = Storage::disk($disk)->url($path);
  64. $resource = $this->repository->insertResource($path, $newName, $file->getClientOriginalName(), $url, $file->getSize());
  65. return $resource;
  66. }
  67. /**
  68. * 上传文件
  69. * @param Request $request
  70. * @param string $dir
  71. * @param array $allow_ext
  72. * @return
  73. * Author: Mead
  74. */
  75. public function upload(Request $request, $dir = '', $allow_ext = [])
  76. {
  77. $disk = 'public';
  78. // 获取上传的文件
  79. $file = $request->file('file');
  80. if (!$file->isFile()) return Response::fail('请上传文件类型', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);;
  81. if (!in_array($file->getClientOriginalExtension(), $allow_ext)) {
  82. return Response::fail('上传文件的类型不对', ResponseCodeEnum::CLIENT_VALIDATION_ERROR);
  83. }
  84. $newName = Str::random(32) . '.' . $file->getClientOriginalExtension();
  85. $path = Storage::disk($disk)->putFileAs($dir, $file, $newName);
  86. return [
  87. 'path' => $path,
  88. 'name' => $newName,
  89. 'original_name' => $file->getClientOriginalName(),
  90. 'disk' => $disk,
  91. ];
  92. }
  93. }