AttachController.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace App\Http\Controllers\Admin\Course;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Criteria\Course\AttachCriteria;
  5. use App\Repositories\Enums\ResponseCodeEnum;
  6. use App\Repositories\Models\Course\Attach;
  7. use App\Repositories\Models\Base\Resource;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Storage;
  10. use Jiannei\Response\Laravel\Support\Facades\Response;
  11. use Prettus\Validator\Contracts\ValidatorInterface;
  12. use App\Contracts\Repositories\Course\AttachRepository;
  13. use App\Repositories\Validators\Course\AttachValidator;
  14. /**
  15. * Class CourseAttachesController.
  16. *
  17. * @package namespace App\Http\Controllers;
  18. */
  19. class AttachController extends Controller
  20. {
  21. /**
  22. * @var AttachRepository
  23. */
  24. protected $repository;
  25. /**
  26. * @var AttachValidator
  27. */
  28. protected $validator;
  29. /**
  30. * CourseAttachesController constructor.
  31. *
  32. * @param AttachRepository $repository
  33. * @param AttachValidator $validator
  34. */
  35. public function __construct(AttachRepository $repository, AttachValidator $validator)
  36. {
  37. $this->repository = $repository;
  38. $this->validator = $validator;
  39. }
  40. public function index($course_video_id)
  41. {
  42. $this->repository->pushCriteria(AttachCriteria::class);
  43. $courseAttaches = $this->repository->where('course_video_id', $course_video_id)->paginate(request('per_page', self::PAGE_NUM));
  44. $attaches = $this->repository->parserResult($courseAttaches);
  45. return Response::success($attaches);
  46. }
  47. public function store($course_video_id, Request $request)
  48. {
  49. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_CREATE));
  50. try {
  51. $data = $request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_CREATE)));
  52. $data['course_video_id'] = $course_video_id;
  53. $courseAttach = $this->repository->create($data);
  54. return Response::success($courseAttach);
  55. } catch (\Exception $e) {
  56. return $this->errorStore($e);
  57. }
  58. }
  59. public function update(Request $request, $id)
  60. {
  61. $this->validate($request, $this->validator->getRules(ValidatorInterface::RULE_UPDATE));
  62. try {
  63. $attaches = $this->repository->update($request->only(array_keys($this->validator->getRules(ValidatorInterface::RULE_UPDATE))), $id);
  64. return Response::success($attaches);
  65. } catch (\Exception $e) {
  66. $this->errorStore($e);
  67. }
  68. }
  69. public function destroy($id)
  70. {
  71. try {
  72. $this->repository->delete($id);
  73. return Response::success(null, T('successfully delete.'));
  74. } catch (\Exception $exception) {
  75. return Response::fail(T('Delete failed.'), ResponseCodeEnum::SERVICE_UPDATE_DATA_ERROR);
  76. }
  77. }
  78. public function download($id)
  79. {
  80. $attach = Attach::query()->where('id', '=', (int)$id)->first();
  81. if ($attach) {
  82. $attach->download_times++;
  83. $attach->save();
  84. $resource = Resource::query()->find($attach->path);
  85. // return response()->download(storage_path('app/public/' . $resource->path), $resource->name, [
  86. return response()->download(Storage::disk($resource->disk)->path($resource->path), $resource->name, [
  87. 'Access-Control-Allow-Origin' => '*',
  88. 'Access-Control-Allow-Methods' => '*',
  89. 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With',
  90. 'Access-Control-Expose-Headers' => 'Content-Disposition',
  91. 'Content-type' => 'application/octet-stream',
  92. 'Content-Disposition' => 'attachment; filename=' . $resource->name,
  93. ]);
  94. }
  95. return $this->errorFail();
  96. }
  97. }