FuelPHP - Tải lên tệp

Tải lên tệp là một trong những tính năng được sử dụng phổ biến nhất trong lập trình biểu mẫu. FuelPHP cung cấp một lớp học đặc biệt,Uploadđể xử lý việc tải tệp lên. Hãy để chúng tôi tìm hiểu cách tải tệp lên bằng lớp Tải lên trong chương này.

Cấu hình

Lớp tải lên có thể được định cấu hình bằng tệp cấu hình riêng biệt, fuel/app/config/upload.php. Các mục cấu hình quan trọng như sau:

  • max_size- Đặt kích thước tối đa của tệp được tải lên. “0” là kích thước tải lên không giới hạn

  • ext_whitelist - Đặt phần mở rộng tệp được phép

  • ext_blacklist - Đặt phần mở rộng tệp không được phép

  • type_whitelist- Đặt các loại tệp được phép. Ví dụ: “văn bản” cho loại kịch câm “văn bản / thuần túy”

  • type_blacklist - Đặt các loại tệp không được phép

  • mime_whitelist- Đặt các loại tệp kịch câm được phép. Ví dụ: “văn bản / thuần túy”

  • mime_blacklist - Đặt các loại tệp mime không được phép

  • prefix - Chuỗi thành tiền tố trong tên tệp trong khi lưu tệp đã tải lên máy chủ

  • suffix - Chuỗi thành hậu tố trong tên tệp trong khi lưu tệp đã tải lên máy chủ

  • extension - Phần mở rộng của tệp đã tải lên sẽ được đặt

  • create_path - Có tạo đường dẫn tệp hay không, nếu không có

  • overwrite - Có ghi đè lên tệp hiện có trong khi lưu tệp đã tải lên hay không

  • auto_rename - Có đổi tên tệp bằng cách thêm số thứ tự trong khi lưu tệp đã tải lên hay không

  • randomize - Có tạo tên 32 ký tự ngẫu nhiên để lưu tệp đã tải lên hay không

Phương thức tải lên

Lớp tải lên cung cấp các tùy chọn để xử lý và lưu tệp do người dùng tải lên. Mọi tệp đã xử lý (trước khi lưu) sẽ có thông tin sau trong mảng kết quả.

  • field - Tên của trường biểu mẫu

  • name - Tên của tệp được tải lên

  • type - Loại tệp được xác định bởi trình duyệt

  • mimetype - Loại tệp được xác định bởi lớp Tải lên

  • file - Tên đầy đủ đủ điều kiện của vị trí tạm thời của tệp được tải lên

  • filename - Tên tệp của tệp đã tải lên

  • extension - Phần mở rộng của tệp đã tải lên

  • size - Kích thước của tệp được tải lên theo byte

  • errors - Mảng lỗi có mã lỗi và thông báo

  • error - Có đặt lỗi mảng với lý do tải lên không (trong trường hợp tải lên không thành công)

Sau khi các tệp được lưu trong máy chủ, mảng kết quả cũng sẽ có thông tin sau.

  • saved_to - Đường dẫn hoàn toàn đủ điều kiện nơi tệp tải lên đã được lưu

  • saved_as - Tên của tệp đã được lưu

  • errors - Cập nhật mảng lỗi

Bây giờ, chúng ta hãy xem phương pháp Tải lên lớp.

is_valid

is_valid trả về true, nếu bất kỳ tệp hợp lệ nào được người dùng tải lên.

// do we have any uploaded files to save? 
if (Upload::is_valid()) { 
   // process  
}

get_files

get_files trả về tất cả các tệp đã tải lên dưới dạng mảng đa chiều. Nếu chỉ mục / tên của đầu vào tệp của biểu mẫu được chỉ định, thì nó sẽ trả về tệp đã tải lên chỉ liên quan đến đầu vào tệp được chỉ định.

foreach(Upload::get_files() as $file) { 
   // do something with the file info 
}  
if ( Upload::get_files(0)) { 
   // do something 
}

get_errors

get_errors trả về một mảng lỗi, nếu không thể tải lên một hoặc nhiều tệp. Nếu chỉ mục / tên của tên đầu vào tệp của biểu mẫu được chỉ định, thì nó sẽ trả về lỗi chỉ liên quan đến đầu vào tệp được chỉ định.

foreach(Upload::get_errors() as $file) { 
   // do something with the file info 
}  
if (Upload::get_errors('myimage')) { 
   // do something 
}

Quá trình

quy trình đề cập đến quy trình thực tế thu thập thông tin về tệp được tải lên. Chúng tôi có thể cung cấp một cấu hình tùy chỉnh mới bằng cách sử dụng mảng. Nếu không có cấu hình nào được chỉ định, thì nó sẽ sử dụng cấu hình được xác định trong fuel / app / config / upload.php

Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

tiết kiệm

save đề cập đến quá trình thực tế lưu tất cả các tệp đã được xác thực vào một vị trí thích hợp. Chúng tôi có thể chỉ định chỉ mục để chỉ lưu mục nhập cụ thể đó.

Upload::save();
Upload::save(0);
Upload::save(0, 3);

Ví dụ làm việc

Hãy để chúng tôi tạo một bộ điều khiển mới, Controller_Upload trong mẫu nhân viên của chúng tôi để kiểm tra chức năng tải lên.

Step 1 - Tạo một tệp, fuel/app/classes/controller/upload.php. Tạo bộ điều khiển tải lên.

<?php 
   class Controller_Upload extends Controller { 
   }

Step 2 - Tạo một hành động mới get_upload.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Step 3 - Tạo một dạng xem mới cho hành động đã tạo.

<!DOCTYPE html> 
<html> 
   <body> 
   
      <form action = "/upload/index" method = "post" enctype = "multipart/form-data"> 
         Select image to upload: 
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form>  
      
   </body> 
</html>

Step 4 - Tạo một hành động post_action mới để xử lý tệp đã tải lên.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      }  
      public function post_index(){ 
         $config = array( 
            'path' => DOCROOT.'files', 
            'randomize' => true, 
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
         );  
         Upload::process($config);  
         // if there are any valid files 
         
         if (Upload::is_valid()) { 
            Upload::save(); 
            echo "success"; 
         } else { 
            // and process any errors 
            foreach (Upload::get_errors() as $file) { 
               echo var_dump($file); 
            } 
         } 
      } 
   }

Cuối cùng, chạy ứng dụng bằng cách yêu cầu url, http://localhost:8080/upload/index và cố gắng tải tệp lên.

Kết quả