-Ở phần trước mình đã giới thiệu với mọi người về Form Request rồi, nhưng đó mới chỉ là gửi nhận dữ liệu dưới dạng text/plain vậy còn gửi và nhận dữ liệu với file thì làm thế nào?
Hôm nay chúng ta sẽ cùng tìm hiểu nốt về upload file trong Laravel
1, Chuẩn Bị.
Tạo View.
-Đầu tiên mình cần tạo ra một view form có một input file và một input submit để thực hiện upload. (name: demo_upload.blade.php)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Demo Upload File - Toidicode.com</title>
<meta name="author" content="ThanhTai">
</head>
<body>
<form action="{{ url('file') }}" enctype="multipart/form-data" method="POST">
{{ csrf_field() }}
<input type="file" name="filesTest" required="true">
<br/>
<input type="submit" value="upload">
</form>
</body>
</html>
Tạo Controller.
Tiếp theo chúng ta cần tạo một controller có tên: FileController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function index()
{
return view('demo_upload');
}
public function doUpload(Request $request)
{
//xử lý upload ở đây
}
}
Tạo Route.
- Cuối cùng là tạo route để điều hướng.
Route::get('file','FileController@index');
Route::post('file','Filecontroller@doUpload');
2, Các Hàm lấy thông tin của file.
-Để cho dễ hiểu mình sẽ làm luôn VD đối với form ở trên.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function index()
{
return view('file');
}
public function doUpload(Request $request)
{
//Kiểm tra file
if ($request->hasFile('fileTest')) {
$file = $request->filesTest;
//Lấy Tên files
echo 'Tên Files: ' . $file->getClientOriginalName();
echo '<br/>';
//Lấy Đuôi File
echo 'Đuôi file: ' . $file->getClientOriginalExtension();
echo '<br/>';
//Lấy đường dẫn tạm thời của file
echo 'Đường dẫn tạm: ' . $file->getRealPath();
echo '<br/>';
//Lấy kích cỡ của file đơn vị tính theo bytes
echo 'Kích cỡ file: ' . $file->getSize();
echo '<br/>';
//Lấy kiểu file
echo 'Kiểu files: ' . $file->getMimeType();
}
}
}
3, Upload File.
-Sau khi đã tạo được View,Controller,route phục vụ cho việc upload file rồi, giờ chúng ta sẽ tiến hành xử lý upload file.
-Để upload files với Request thì Laravel có cung cấp cho chúng ta hàm move() sử dụng với 2 thông số truyền vào:
move($Location, $filesName)
Trong đó:
- $Location: Là thư mục chứa file upload lên Sever.
- $filesName: Là tên mới của file.
VD: Mình sẽ upload form ở VD trên vào thư mục uploads:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FileController extends Controller
{
public function index()
{
return view('file');
}
public function doUpload(Request $request)
{
$file = $request->filesTest;
$file->move('upload', $file->getClientOriginalName());
// hàm sẽ trả về đường dẫn mới của file trên server nếu thành công
// còn nếu không nó sẽ raise ra exception.
}
}
4) Lời kết.
-Phần trên mình đã giới thiệu với mọi người về uploadfiles trong Laravel. Còn cách ràn buộc loại files, dung lượng files mình sẽ trình bày tiếp ở các phần sau.
Chúc các bạn học tốt!
Đăng ký nhận tin.
Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!
Mình chạy theo đoạn code trong DemoUpload.blade.php của ad chẳng được. Mình nghĩ như thế này thì sửa lại được
Chỗ tạo form trong DemoUpload.blade.php nó không chạy được khi ad dùng action = {{url('file')}}
Thay vì vậy ad phải dùng chuyển tới 1 route action = "{{route('file')}}", tên 'file' phải là 1 định danh như sau:
Trong file routes.php
Route::post('file','Filecontroller@doUpload')->name('file');
Ad chỉ cần dùng 1 định danh xong rồi chuyển từ view gọi tới định danh này là đuuợc
* Góp ý:
1. Người dùng muốn comment mà phải nhập tùm lum kể cả mã captcha nữa thì bỏ hộ cái
hacker
7 năm trước
Thứ nhất là source vẫn chạy bình thường mà bạn, hoặc bạn cũng có thể sử dụng route name để tăng tính bảo trì cho code.
Thứ 2 là do bạn nhập linh tinh, nên nó mới không được thôi, tên toàn hacker thế này mình mà không để captcha hacker như bạn lại hack thì sao.
Vũ Thanh Tài
7 năm trước
Hahha
Namdaik
6 năm trước
l
6 năm trước
anh nói chuẩn
Vinh
5 năm trước
Anh nói quá chuẩn
Vinh
5 năm trước
Cảm ơn ad rất nhiều :))
Lạc
7 năm trước
bạn có thể hướng dẫn multiple file upload được không
Trần Ngọc Tú
7 năm trước
sao minh get file lúc nào cũng ra null vậy
$request->hasFile('stl')
=> []
An
7 năm trước
mình nghĩ là nên có thêm example hoặc hình demo để dễ hình dung hơn. cảm ơn ad !
N
6 năm trước
<input type="file" name="filesTest" required="true">
sai nhé :D
NOT
6 năm trước
Bùi Ngọc Khánh
4 năm trước
Chào Bùi Ngọc Khánh,
Bạn cho mình xem log lỗi với
Vũ Thanh Tài
4 năm trước