From adb9eedabd5c483a04d55f987fcae64a99861f59 Mon Sep 17 00:00:00 2001 From: Ben901227 Date: Sun, 24 Mar 2024 04:07:40 +0800 Subject: [PATCH 1/3] feat: upload image to imgur feat: upload image to imgur --- app/Http/Controllers/RecordController.php | 71 ++++++++++++++++------- resources/views/record/create.blade.php | 2 +- routes/web.php | 3 + 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/Http/Controllers/RecordController.php b/app/Http/Controllers/RecordController.php index 32a3df8..06ffa47 100644 --- a/app/Http/Controllers/RecordController.php +++ b/app/Http/Controllers/RecordController.php @@ -2,10 +2,12 @@ namespace App\Http\Controllers; -use Illuminate\Http\Request; use App\Models\Record; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\File; +use Illuminate\Support\Facades\Http; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; use Spatie\LaravelImageOptimizer\Facades\ImageOptimizer; @@ -19,7 +21,7 @@ class RecordController extends Controller */ public function index() { - $records = Record::orderBy('start_date','desc')->get(); + $records = Record::orderBy('start_date', 'desc')->get(); $category_array = ["中級山", "高山", "溯溪"]; return view('record.record', compact('records', 'category_array')); } @@ -31,11 +33,11 @@ public function index() */ public function create() { - if(Auth::check() && Auth::user()->role > 0){ + if (Auth::check() && Auth::user()->role > 0) { return view('record.create'); } - return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。'); + return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。'); } /** @@ -66,7 +68,7 @@ public function store(Request $request) $folder_name = "uploads/images/records"; $name = $request->input('name'); - $record = New Record(); + $record = new Record(); $record->name = $request->input('name'); $record->description = $request->input('description'); $record->category = $request->input('category'); @@ -83,7 +85,7 @@ public function store(Request $request) /** * Display the specified resource. * - * @param int $id + * @param int $id * @return \Illuminate\Http\Response */ public function show($id) @@ -96,25 +98,25 @@ public function show($id) /** * Show the form for editing the specified resource. * - * @param int $id + * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $record = Record::findOrFail($id); - if(Auth::check() && Auth::user()->role > 0){ + if (Auth::check() && Auth::user()->role > 0) { return view('record.edit', compact('record')); } - return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。'); + return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。'); } /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request - * @param int $id + * @param \Illuminate\Http\Request $request + * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) @@ -127,10 +129,10 @@ public function update(Request $request, $id) ]); if ($validator->fails()) { - return redirect()->back()->with('status','結束日期需在開始日期之後,請再次確認。'); + return redirect()->back()->with('status', '結束日期需在開始日期之後,請再次確認。'); } - if($request->image) { + if ($request->image) { File::delete(public_path($record->image)); $file = $request->image; $folder_name = "uploads/images/records"; @@ -152,34 +154,36 @@ public function update(Request $request, $id) /** * Remove the specified resource from storage. * - * @param int $id + * @param int $id * @return \Illuminate\Http\Response */ public function delete($id) { $record = Record::findOrFail($id); - if(Auth::check() && Auth::user()->role > 0){ + if (Auth::check() && Auth::user()->role > 0) { File::delete(public_path($record->image)); $record->delete(); - return redirect()->route('record.index')->with('status','紀錄刪除成功'); + return redirect()->route('record.index')->with('status', '紀錄刪除成功'); } - return redirect()->route('portal.index')->with('status','您並無權限進行此操作,請先登入。'); + return redirect()->route('portal.index')->with('status', '您並無權限進行此操作,請先登入。'); } - public function storeImage($file, $folder_name, $name) { + public function storeImage($file, $folder_name, $name) + { $upload_path = public_path() . '/' . $folder_name; - $extension = $file->extension(); - $filename = $name . time() . '.' . $extension; + $extension = $file->extension(); + $filename = $name . time() . '.' . $extension; $file->move($upload_path, $filename); ImageOptimizer::optimize($folder_name . '/' . $filename); return $folder_name . '/' . $filename; } - public function uploadImage(Request $request) { + public function uploadImage(Request $request) + { if ($request->hasFile('upload')) { $folder_name = "uploads/images/records"; @@ -192,9 +196,32 @@ public function uploadImage(Request $request) { $request->file('upload')->move($upload_path, $fileName); $url = asset($folder_name . '/' . $fileName); + return response()->json(['fileName' => $fileName, 'uploaded' => 1, 'url' => $url]); + } + } - return response()->json(['fileName' => $fileName, 'uploaded'=> 1, 'url' => $url]); + public function callImgurApi(Request $request) + { + if (!$request->hasFile('upload')) { + return response()->json(['message' => 'No image uploaded'], 400); } + $image = $request->file('upload'); + + + $response = Http::withHeaders([ + 'Authorization' => 'Client-ID ' . '4fcd3b4531ce032', + ])->attach( + 'image', file_get_contents($image), $image->getClientOriginalName() + )->post('https://api.imgur.com/3/image'); + + if ($response->successful()) { + $responseJson = $response->json(); + $fileName = pathinfo($image->getClientOriginalName(), PATHINFO_FILENAME);; + return response()->json(['fileName' => $fileName, 'uploaded' => 1, 'url' => $responseJson['data']['link']]); + + } else { + Log::error($response); + } } } diff --git a/resources/views/record/create.blade.php b/resources/views/record/create.blade.php index d507a08..87080c4 100644 --- a/resources/views/record/create.blade.php +++ b/resources/views/record/create.blade.php @@ -112,7 +112,7 @@ class="createRecordForm" enctype="multipart/form-data">