Công cụ thành viên

Công cụ trang web


programming4:class:upload

Đây là một phiên bản cũ của tài liệu!


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ị

  1. Cài đặt NukeViet 4.4.02 (link tải NukeViet 4.4.02) hoặc tương đương.
  2. 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}&amp;{NV_NAME_VARIABLE}={MODULE_NAME}&amp;{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ính enctype=“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ày text, images, archives, audio, video, xml, documents, adobe, flash, real, application. Chi tiết các giá trị đó xem ở file includes/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ấm
  • NV_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>

Tải file trên internet

programming4/class/upload.1604281983.txt.gz · Sửa đổi lần cuối: 2020/11/02 08:53 bởi hoaquynhtim99