AttachmentController.php 4.3 KB

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