Bài 14: Upload File - Hình ảnh trong laravel 5.x
Upload file hay hình ảnh là chức năng ko thể thiếu của 1 website, Laravel 5 hỗ trợ việc upload này rất đơn giản ngay cả việc validate file up lên. Bây giờ mình bắt tay vào 1 ví dụ cụ thể luôn cho các bạn dễ hiểu
Đầu tiên mình cần tạo 1 cái form để submit file lên nhỉ. Bạn vào resources/view/demo tạo file form_upload.blade.php và thêm nội dung như bên dưới:
<div class="content-form">
{{-- Hiển thị thông báo lỗi xảy ra --}}
@if ($errors->any())
<ul class="error-form">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<form action="demo-upload" method="POST" enctype="multipart/form-data">
<input type="hidden" name="_token" value="{{ scrf_token() }}">
<input type="file" name="file" class="form-control">
<button type="submit">Tải lên</button>
</form>
</div>
Ở đây mình sử dụng form thông thường hay xài thay vì cài thêm thư viện form của Laravel, các bạn lưu ý trong mỗi form của Laravel đều có token với giá trị là hàm csrf_token() nhé.
Tiếp theo mình cần khai báo với route 1 url để hiện thị form và 1 url để xử lý form này
Route::get('/show-upload', function(){
return view('demo.form_upload');
});
Route::post('/upload-file', 'DemoController@uploadFile');
Bây giờ việc xử lý sẽ được thực hiện trong DemoController với phương thức là uploadFile
public function uploadFile(Request $request){
// Thông báo khi xảy ra lỗi
$messages = [
'image' => 'Định dạng không cho phép',
'max' => 'Kích thước file quá lớn',
];
// Điều kiện cho phép upload
$this->validate($request, [
'file' => 'image|max:2028',
], $messages);
// Kiểm tra file hợp lệ
if ($request->file($name)->isValid()){
// Lấy tên file
$file_name = $request->file($name)->getClientOriginalName();
// Lưu file vào thư mục upload với tên là biến $filename
$request->file($name)->move('upload',$file_name);
}
}
Khi upload 1 file bất kì lên server bạn cần lưu ý kiểm tra:
- Loại file được upload lên tránh các file chứa mã độc
- Kích thước file upload lớn làm đầy dung lượng server
Chúc các bạn thành công!