AttachController.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Http\Controllers\Api\Course;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\ModelStatusEnum;
  5. use App\Repositories\Models\Base\Resource;
  6. use App\Repositories\Models\Course\Attach;
  7. use App\Services\Course\AttachService;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Storage;
  10. use Jiannei\Response\Laravel\Support\Facades\Response;
  11. /**
  12. * 附件管理
  13. *
  14. * @package namespace App\Http\Controllers;
  15. */
  16. class AttachController extends Controller
  17. {
  18. protected $service;
  19. public function __construct(AttachService $service)
  20. {
  21. parent::__construct();
  22. $this->service = $service;
  23. }
  24. /**
  25. * 列表
  26. * @param Request $request
  27. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\Resource
  28. * @throws \Prettus\Repository\Exceptions\RepositoryException
  29. */
  30. public function index(Request $request)
  31. {
  32. $this->validateData($request, ['course_id' => 'required|integer', 'course_video_id' => 'nullables|integer']);
  33. $data = $this->service->handleList($request);
  34. return $this->response->success($data);
  35. }
  36. /**
  37. * 下载文件
  38. * @param Request $request
  39. * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
  40. * @throws \Illuminate\Validation\ValidationException
  41. */
  42. public function download(Request $request)
  43. {
  44. $data = $this->validateData($request, ['course_id' => 'required|integer', 'course_video_id' => 'required|integer', 'id' => 'required|integer']);
  45. $attach = Attach::query()->where('course_id', $data['course_id'])->where('course_video_id', $data['course_video_id'])->where('id', $data['id'])->where('status', ModelStatusEnum::OK)->first();
  46. if ($attach) {
  47. $attach->download_times++;
  48. $attach->save();
  49. $resource = Resource::query()->find($attach->path);
  50. if (!Storage::disk($resource->disk)->exists($resource->path)) {
  51. return Response::fail('找不到文件');
  52. }
  53. return response()->download(Storage::disk($resource->disk)->path($resource->path), $resource->name, [
  54. 'Access-Control-Allow-Origin' => '*',
  55. 'Access-Control-Allow-Methods' => '*',
  56. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  57. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  58. 'Content-type' => 'application/octet-stream',
  59. 'Content-Disposition' => 'attachment; filename=' . $resource->name,
  60. ]);
  61. }
  62. return $this->error('找不到该文件');
  63. }
  64. }