Bài 14: Upload File - Hình ảnh trong laravel 5.x

Admin
07-03-2018

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!