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();
});