2
0

AttachmentController.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 = config('mint.attachments.bucket_name.permanent');
  68. $fileId = Str::uuid();
  69. $ext = $file->getClientOriginalExtension();
  70. $name = $fileId.'.'.$ext;
  71. $filename = $file->storeAs($bucket,$name);
  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. /*
  86. $resize = Image::make($file)->fit(128);
  87. Storage::disk('public')->put($bucket.'/'.$fileId.'_s.jpg',$resize->stream());
  88. $resize = Image::make($file)->fit(256);
  89. Storage::disk('public')->put($bucket.'/'.$fileId.'_m.jpg',$resize->stream());
  90. $resize = Image::make($file)->fit(512);
  91. Storage::disk('public')->put($bucket.'/'.$fileId.'_l.jpg',$resize->stream());
  92. */
  93. break;
  94. case 'video':
  95. //$path = public_path($filename);
  96. //$ffmpeg = FFMpeg::create();
  97. //$video = $ffmpeg->open(public_path($filename));
  98. //$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(1));
  99. //$frame->save('image.jpg');
  100. break;
  101. default:
  102. # code...
  103. break;
  104. }
  105. $json = array(
  106. 'name' => $filename,
  107. 'size' => $file->getSize(),
  108. 'type' => $file->getMimeType(),
  109. 'url' => Storage::url($bucket.'/'.$name),
  110. 'uid' => $attachment->id,
  111. );
  112. return $this->ok(new AttachmentResource($attachment));
  113. }
  114. /**
  115. * Display the specified resource.
  116. *
  117. * @param \App\Models\Attachment $attachment
  118. * @return \Illuminate\Http\Response
  119. */
  120. public function show(Attachment $attachment)
  121. {
  122. //
  123. return $this->ok(new AttachmentResource($attachment));
  124. }
  125. /**
  126. * Update the specified resource in storage.
  127. *
  128. * @param \Illuminate\Http\Request $request
  129. * @param \App\Models\Attachment $attachment
  130. * @return \Illuminate\Http\Response
  131. */
  132. public function update(Request $request, Attachment $attachment)
  133. {
  134. //
  135. }
  136. /**
  137. * Remove the specified resource from storage.
  138. *
  139. * @param \App\Models\Attachment $attachment
  140. * @return \Illuminate\Http\Response
  141. */
  142. public function destroy(Attachment $attachment)
  143. {
  144. //
  145. }
  146. }