Đây là một phiên bản cũ của tài liệu!
Mục lục
Hướng dẫn chi tiết cách sử dụng class Upload để tải file lên hệ thống
Class upload là lớp có chứa các chức năng tải file lên hệ thống. File tải lên có thể từ máy tính hoặc một file trên internet
Chuẩn bị
- Cài đặt NukeViet 4.4.02 (link tải NukeViet 4.4.02) hoặc tương đương.
- Cài đặt module mẫu samples (nv4_module_samples.zip) để lập trình
Hướng dẫn lập trình
Tải file từ máy tính
Chuẩn bị một form để gửi file từ máy tính lên server:
Mở file themes/admin_default/modules/samples/main.tpl
thêm vào đoạn HTML để tạo ra form gửi file lên máy tính, code html như sau
- main.tpl
<!-- BEGIN: main --> <form action="{NV_BASE_ADMINURL}index.php?{NV_LANG_VARIABLE}={NV_LANG_DATA}&{NV_NAME_VARIABLE}={MODULE_NAME}&{NV_OP_VARIABLE}={OP}" method="post" enctype="multipart/form-data"> <div class="panel panel-default"> <div class="panel-body"> <div class="form-group"> <label>File:</label> <input type="file" name="uploadfile"> </div> <input class="btn btn-primary" name="submit" type="submit" value="{LANG.save}" /> </div> </div> </form> <!-- END: main -->
Với file này ta sẽ có được một form upload file như ảnh
Lưu ý: Thẻform
cần có thuộc tínhenctype=“multipart/form-data”
mới có thể gửi file lên server.
Lập trình xử lý để lưu file gửi lên trên server
Trong file modules/samples/admin/main.php
bên dưới đoạn
//------------------------------ // Viết code xử lý chung vào đây //------------------------------
Chúng ta bắt đầu lập trình:
Nhận diện được có file tải lên:
Dùng lệnh
if ($nv_Request->isset_request('submit', 'post') and isset($_FILES, $_FILES['uploadfile'], $_FILES['uploadfile']['tmp_name']) and is_uploaded_file($_FILES['uploadfile']['tmp_name'])) { // }
Trong đó:
- Điều kiện
$nv_Request→isset_request('submit', 'post')
để kiểm tra sự kiện submit form - Điều kiện
isset($_FILES, $_FILES['uploadfile'], $_FILES['uploadfile']['tmp_name']) and is_uploaded_file($_FILES['uploadfile']['tmp_name'])
để kiểm tra có file tải lên hợp lệ.
Sau khi kiểm tra xong, tiến hành lưu file tải lên bằng các lệnh sau
// Khởi tạo Class upload $upload = new NukeViet\Files\Upload($admin_info['allow_files_type'], $global_config['forbid_extensions'], $global_config['forbid_mimes'], NV_UPLOAD_MAX_FILESIZE, NV_MAX_WIDTH, NV_MAX_HEIGHT); // Thiết lập ngôn ngữ, nếu không có dòng này thì ngôn ngữ trả về toàn tiếng Anh $upload->setLanguage($lang_global); // Tải file lên server $upload_info = $upload->save_file($_FILES['uploadfile'], NV_UPLOADS_REAL_DIR, false, $global_config['nv_auto_resize']);
Các tham số khởi tạo bao gồm:
$admin_info['allow_files_type']
là các loại file được phép tải lên, nếu tải lên file không thuộc các loại này sẽ báo lỗi. Lập trình viên có thể thay biến này bằng mảng một chiều khác thuộc các giá trị nàytext, images, archives, audio, video, xml, documents, adobe, flash, real, application
. Chi tiết các giá trị đó xem ở fileincludes/ini/mime.ini
$global_config['forbid_extensions'], $global_config['forbid_mimes']
là hai tham số không đổi, đây là mảng chứa các phần mở rộng bị cấm và mime bị cấmNV_UPLOAD_MAX_FILESIZE
dung lượng tối đa tính bằng byte của file tải lên.NV_MAX_WIDTH, NV_MAX_HEIGHT
là kích thước rộng, cao tối đa của file tải lên nếu là ảnh.
Các tham số lưu file tải lên bao gồm:
$_FILES['uploadfile']
đây là biến file tải lên của php (tham khảo thêm ở POST method uploads)NV_UPLOADS_REAL_DIR
là địa chỉ tuyệt đối của thư mục lưu file. Trong ví dụ này giá trịNV_UPLOADS_REAL_DIR
biểu thị thư mục lưu file làuploads
- Tham số tiếp theo đang mang giá trị
false
, tại đây lập trình viên đặt true hoặc false tương ứng với việc thay thế nếu tồn tại hoặc lưu với tên khác nếu tồn tại. - Tham số tiếp theo đang để giá trị
$global_config['nv_auto_resize']
tham số này có thể truyền giá trị 1, 0 biểu thị nếu file tải lên là ảnh mà vượt quá kích thước tối đa sẽ tự động thay đổi về kích thước tối đa hoặc là dừng upload.
Kết quả trả về trong ví dụ được lưu vào biến $upload_info
, đây là mảng một chiều lưu trữ thông tin tải file lên.
Có 3 trường hợp:
1. Có lỗi, mảng này sẽ như sau
Array ( [error] => Lỗi: loại file không được phép tải lên )
2. Thành công, file tải lên là ảnh
Array ( [error] => [complete] => 1 [name] => D:/webroot/www/nukeviet4/tmp2.nukeviet4.my/uploads/uq7c94b.jpg [basename] => uq7c94b.jpg [ext] => jpg [mime] => image/jpeg [size] => 40892 [is_img] => 1 [is_svg] => [img_info] => Array ( [0] => 720 [1] => 720 [2] => 2 [3] => width="720" height="720" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) )
3. Thành công, file tải lên là loại file khác
<code> Array (
[error] => [complete] => 1 [name] => D:/webroot/www/nukeviet4/tmp2.nukeviet4.my/uploads/nv4_module_samples.zip [basename] => nv4_module_samples.zip [ext] => zip [mime] => application/zip [size] => 19148 [is_img] => [is_svg] =>
) <code>