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:
Chúc các bạn thành công!