2
0

AttachmentController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\File;
  4. use Illuminate\Support\Facades\Storage;
  5. use App\Models\Attachment;
  6. use Illuminate\Http\Request;
  7. use App\Http\Api\AuthApi;
  8. use App\Http\Api\StudioApi;
  9. use App\Http\Resources\AttachmentResource;
  10. use Illuminate\Support\Str;
  11. use Intervention\Image\ImageManagerStatic as Image;
  12. use FFMpeg\FFMpeg;
  13. class AttachmentController extends Controller
  14. {
  15. /**
  16. * Display a listing of the resource.
  17. *
  18. * @return \Illuminate\Http\Response
  19. */
  20. public function index()
  21. {
  22. //
  23. switch ($request->get('view')) {
  24. case 'studio':
  25. $user = AuthApi::current($request);
  26. if(!$user){
  27. return $this->error(__('auth.failed'));
  28. }
  29. //判断当前用户是否有指定的studio的权限
  30. if($user['user_uid'] !== StudioApi::getIdByName($request->get('studio'))){
  31. return $this->error(__('auth.failed'));
  32. }
  33. $table = Attachment::where('studio_id', $user["user_uid"]);
  34. break;
  35. default:
  36. return $this->error("error view",[],200);
  37. break;
  38. }
  39. if($request->has('search')){
  40. $table = $table->where('title', 'like', $request->get('search')."%");
  41. }
  42. $count = $table->count();
  43. $table = $table->orderBy($request->get('order','updated_at'),
  44. $request->get('dir','desc'));
  45. $table = $table->skip($request->get('offset',0))
  46. ->take($request->get('limit',1000));
  47. $result = $table->get();
  48. return $this->ok(["rows"=>AttachmentResource::collection($result),"count"=>$count]);
  49. }
  50. /**
  51. * Store a newly created resource in storage.
  52. *
  53. * @param \Illuminate\Http\Request $request
  54. * @return \Illuminate\Http\Response
  55. */
  56. public function store(Request $request)
  57. {
  58. $user = AuthApi::current($request);
  59. if(!$user){
  60. return $this->error(__('auth.failed'),[],401);
  61. }
  62. $request->validate([
  63. 'file' => 'required',
  64. ]);
  65. $file = $request->file('file');
  66. //Move Uploaded File
  67. $bucket = date("Y-m");
  68. $fileId = Str::uuid();
  69. $ext = $file->getClientOriginalExtension();
  70. $name = $fileId.'.'.$ext;
  71. $filename = $file->storeAs($bucket,$name,'public');
  72. $attachment = new Attachment;
  73. $attachment->id = $fileId;
  74. $attachment->user_uid = $user['user_uid'];
  75. $attachment->bucket = $bucket;
  76. $attachment->name = $name;
  77. $attachment->title = $file->getClientOriginalName();
  78. $attachment->size = $file->getSize();
  79. $attachment->content_type = $file->getMimeType();
  80. $attachment->status = 'public';
  81. $attachment->save();
  82. $type = explode('/',$file->getMimeType());
  83. switch ($type[0]) {
  84. case 'image':
  85. $resize = Image::make($file)->fit(128);
  86. Storage::disk('public')->put($bucket.'/'.$fileId.'_s.jpg',$resize->stream());
  87. $resize = Image::make($file)->fit(256);
  88. Storage::disk('public')->put($bucket.'/'.$fileId.'_m.jpg',$resize->stream());
  89. $resize = Image::make($file)->fit(512);
  90. Storage::disk('public')->put($bucket.'/'.$fileId.'_l.jpg',$resize->stream());
  91. break;
  92. case 'video':
  93. //$path = public_path($filename);
  94. //$ffmpeg = FFMpeg::create();
  95. //$video = $ffmpeg->open(public_path($filename));
  96. //$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(1));
  97. //$frame->save('image.jpg');
  98. break;
  99. default:
  100. # code...
  101. break;
  102. }
  103. $json = array(
  104. 'name' => $filename,
  105. 'size' => $file->getSize(),
  106. 'type' => $file->getMimeType(),
  107. 'url' => Storage::disk('public')->url($filename),
  108. 'uid' => $attachment->id,
  109. );
  110. return $this->ok(new AttachmentResource($attachment));
  111. }
  112. /**
  113. * Display the specified resource.
  114. *
  115. * @param \App\Models\Attachment $attachment
  116. * @return \Illuminate\Http\Response
  117. */
  118. public function show(Attachment $attachment)
  119. {
  120. //
  121. return $this->ok(new AttachmentResource($attachment));
  122. }
  123. /**
  124. * Update the specified resource in storage.
  125. *
  126. * @param \Illuminate\Http\Request $request
  127. * @param \App\Models\Attachment $attachment
  128. * @return \Illuminate\Http\Response
  129. */
  130. public function update(Request $request, Attachment $attachment)
  131. {
  132. //
  133. }
  134. /**
  135. * Remove the specified resource from storage.
  136. *
  137. * @param \App\Models\Attachment $attachment
  138. * @return \Illuminate\Http\Response
  139. */
  140. public function destroy(Attachment $attachment)
  141. {
  142. //
  143. }
  144. }