Laravel cơ bản
Laravel nâng cao
Quảng cáo

Upload file trong Laravel

Trong hướng dẫn này chúng ta cùng đi tìm hiểu cách Upload file trong Laravel 8 bằng phương thức store thông qua ví dụ cụ thể chi tiết.

Bài trước mình đã có nói qua về File trong bài này chúng ta cùng đi xem xét cáchupload file trong Laravel thông qua phương thức store.

Store Upload file.

Để lưu trữ các file đã được upload lên trên request các bạn sử dụng phương thức store với cú pháp như sau:

Cú pháp

$request->file('photo')->store($path, $diskType);

Trong đó:

  • $path là path mà bạn muốn lưu trữ file.
  • $diskType là loại disk mà bạn muốn lưu trữ. Các thông tin này các bạn có thể config ở trong config/filesystems.php. Mặc định thì laravel sẽ sử dụng disk là local, loại disk này sẽ lưu trữ thông tin vào trong thư mục storage/app/.

VD: Lưu trữ ảnh vào trong thư mục storage/app/images

Ví dụ

$path = $request->file('photo')->store('images');

// hoặc

$path = $request->file('photo')->store('images', 'local');

Khi các bạn sử dụng phương thức store để lưu trữ file, thì tên của file khi được lưu trữ sẽ là một chuỗi ngẫu nhiên 40 ký tự được sinh ra bởi Str::random(40) trong Collection.

Nếu bạn muốn đặt tên file theo cách của bạn thì có thể sử dụng phương thức storeAs với cú pháp sau:

Cú pháp

$request->file('photo')->storeAs($path, $fileName, $diskType);

Trong đó: $path$diskType tương tự như đối với store. $fileName là tên của file mà các bạn muốn lưu trữ.

Ví dụ

$request->file('image')->storeAs('images', 'avatar.jpg', 'local');

Ngoài ra bạn cũng có thể sử dụng phương thức move để lưu trữ file. Nhưng đối với phương thức này thì root folder sẽ được tính từ public/.

VD: Lưu trữ image vào thư mục public/images

Ví dụ

$request->file('image')->storeAs('images', 'avatar.jpg', 'local');

Ví dụ upload file trong Laravel.

Đầu tiên mình sẽ tạo ra hai route để hiển thị ra form upload file và xử lý việc upload file.

- routes/web.php

Ví dụ

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

Route::get('/', function () {
    return view('form');
});

Route::post('upload', function (Request $request) {
    // logic xử lý upload file.
})->name('upload.handle');

Tiếp đó mình sẽ tạo một view form.blade.php chứa HTML form để upload file.

- resources/views/form.blade.php

Ví dụ

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<form action="{{ route('upload.handle') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <input type="submit" value="Submit">
</form>
</body>
</html>

Tiếp theo đó, mình sẽ quay lại route để viết thêm logic để xử lí upload file.

- routes/web.php

Ví dụ

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

Route::get('/', function () {
    return view('form');
});

Route::post('upload', function (Request $request) {
    // Kiểm tra xem người dùng có upload file nên không
    if (!$request->hasFile('image')) {
        // Nếu không thì in ra thông báo
        return "Mời chọn file cần upload";
    }
    // Nếu có thì thục hiện lưu trữ file vào public/images
    $image = $request->file('image');
    $storedPath = $image->move('images', $image->getClientOriginalName());

    return "Lưu trữ thành công";
})->name('upload.handle');

Thế là hoàn thành việc upload file trong Laravel.

Lời kết.

Trên đây chỉ là một ví dụ đơn giản về upload trong Laravel để các bạn có thể hiểu về cách upload file trong Laravel, trong thực tế các dự án thì bạn cần kiểm tra file trước khi upload, xử lý file khi upload ... những điều đó chúng ta sẽ đi xem xét ở các phần tiếp theo

Bài viết này đã giúp ích cho bạn?

Advertisements