Tạo Api upload hình ảnh lên server

Tạo Api upload hình ảnh lên server

Để tại Api upload chúng ta tạo controller :

<?php

namespace App\Http\Controllers;

use App\Help\Image;
use App\Http\Requests\StoreUploadRequest;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;


class UploadController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(StoreUploadRequest $request)
    {
            $image = $request->image;
            $anh = Image::UploadImage($image);
            $data['status'] = true;
            $data['url'] = $anh;
        return response()->json($data);
    }
}

Tạo file app/Help/Image.php

<?php

namespace App\Help;

use Carbon\Carbon;
use Illuminate\Support\Facades\Storage;

class Image
{
    public static function UploadImage($image, $random = 0, $disk = 'public')
    {
        if ($image != '') {
            $input = $image->getClientOriginalName();
            $day = Carbon::now()->day;
            $year = Carbon::now()->year;
            $month = Carbon::now()->month;
            $hours = Carbon::now()->hour; //giờ
            $minute = Carbon::now()->minute; //phút
            $second = Carbon::now()->second; //giây
            $filename = $input;
            $path = $year . '/' . $month . '/' . $day . '/' . $filename;
            $exists = Storage::disk($disk)->exists($path);
            if ($exists) {
                if ($random > 0) {
                    $filename = rand(0, $random) . '_' . $input;
                }
                $path = $year . '/' . $month . '/' . $day . '/' . $hours . $minute . $second  . $filename;
            }
            $store = Storage::disk($disk)->put($path, file_get_contents($image));
            if ($store) {
                $link_save = Storage::disk('public')->url($path);
            } else {
                $link_save = '';
            }
            return $link_save;
        } else {
            return '';
        }

    }
}

Tạo request app/Http/Requests/StoreUploadRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;

class StoreUploadRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\Rule|array|string>
     */
    public function rules(): array
    {
        return [
            'image' => 'required',
            'image.*' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048'
        ];
    }
    public function messages()
    {
        return[
            'image.required' =>'Vui lòng chọn ảnh',
        ];
    }
    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(response()->json([
            'status'=>false,
            'url'=>'hehe',
            'messages'=>$validator->errors(),
        ]));
    }
}

Chỉnh sửa router trong file routes/api.php

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "api" middleware group. Make something great!
|
*/
Route::post('upload',[\App\Http\Controllers\UploadController::class,'index'])->name('upload');
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});