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 ở trongconfig/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ụcstorage/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
và $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