CakePHP - Tải lên tệp

Để làm việc trong quá trình tải lên tệp, chúng tôi sẽ sử dụng trình trợ giúp biểu mẫu. Đây là một ví dụ cho việc tải tệp lên.

Thí dụ

Thực hiện các thay đổi trong tệp config / route.php, như được hiển thị trong chương trình sau.

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('fileupload',['controller'=>'Files','action'=>'index']);
   $builder->fallbacks();
});

Tạo một FilesController.php nộp tại src/Controller/FilesController.php.Sao chép mã sau vào tệp bộ điều khiển. Bỏ qua, nếu đã được tạo.

Tạo thư mục tải lên / trong src /. Các tệp được tải lên sẽ được lưu trong thư mục tải lên /.

src / Controller / FilesController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\View\Helper\FormHelper;
   class FilesController extends AppController {
      public function index(){
         if ($this->request->is('post')) {
            $fileobject = $this->request->getData('submittedfile');
            $uploadPath = '../uploads/';
            $destination = $uploadPath.$fileobject->getClientFilename();
            // Existing files with the same name will be replaced.
            $fileobject->moveTo($destination);
         }
      }
   }
?>

Tạo một thư mục Files tại src/Template và trong thư mục đó tạo một View tệp được gọi là index.php. Sao chép mã sau vào tệp đó.

src / Template / Files / index.php

<?php
   echo $this->Form->create(NULL, ['type' => 'file']);
   echo $this-&gtl;Form->file('submittedfile');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
   $uploadPath ='../uploads/';
   $files = scandir($uploadPath, 0);
   echo "Files uploaded in uploads/ are:<br/>";
   for($i = 2; $i < count($files); $i++)
      echo "File is - ".$files[$i]."<br>";
?>

Các tệp được lưu trong thư mục tải lên / được liệt kê cho người dùng. Thực hiện ví dụ trên bằng cách truy cập URL sau:

http: // localhost / cakephp4 / fileupload -

Đầu ra

Khi bạn thực thi đoạn mã trên, bạn sẽ thấy kết quả sau: