【问题标题】:Codeigniter 4: Uploading files with move_uploaded_fileCodeigniter 4:使用 move_uploaded_file 上传文件
【发布时间】:2020-06-21 08:28:51
【问题描述】:

我刚刚开始将 CodeIgniter 3 项目迁移到 CodeIgniter 4。

除了文件上传,一切正常。

我想将用户上传的文件保存在 /writable/uploads 中。下面是我用来将上传的文件移动到所需位置的代码。

            $target_dir = '/writable/uploads/recordings/';
            $target_file = $target_dir . basename($_FILES["gfile"]["name"]);
            $FileType = pathinfo($target_file,PATHINFO_EXTENSION);

            if($FileType != "mp3") {            
             $vmuploadOk = 1;
            }               
            else
             $vmuploadOk = 1;   


            if ($vmuploadOk == 1) {
                $greetfile = $id . "g" . basename($_FILES["gfile"]["name"]);

                $target_filenew = $target_dir . $greetfile;     

                move_uploaded_file($_FILES["gfile"]["tmp_name"], $target_filenew);                 
            }

我认为这是因为 CI4 将可写文件夹保留在公用文件夹之外。

【问题讨论】:

  • 您也可以将文件上传到公用文件夹之外,这就是为什么我向您显示上面的参考链接
  • 我使用了 $file = $this->request->getFile('gfile'); $file->move(WRITEPATH.'uploads/recordings', $greetfile);它可以工作,但如果存在,它不会覆盖文件。它会创建文件的副本。

标签: php codeigniter file-upload codeigniter-4


【解决方案1】:

这对我有用,我希望它也对你有用。在 codeigniter 4 中,请使用它来上传您的文件并将其移动到您的控制器中。


if($imagefile = $this->request->getFiles())
{
    if($img = $imagefile['gfile'])
    {
        if ($img->isValid() && ! $img->hasMoved())
        {
            $newName = $img->getRandomName(); //This is if you want to change the file name to encrypted name
            $img->move(WRITEPATH.'uploads', $newName);

            // You can continue here to write a code to save the name to database
            // db_connect() or model format

        }
    }
}

或者


        if($img = $this->request->getFile('gfile'))
        {
            if ($img->isValid() && ! $img->hasMoved())
            {
                $newName = $img->getRandomName();
                $img->move('./public/uploads/images/users', $newName);

                // You can continue here to write a code to save the name to database
                // db_connect() or model format

            }
        }

然后在你的 html 中 使用这个

<input type="file" name="gfile">

我希望这能帮助您引起我的注意。

【讨论】:

    【解决方案2】:

    您没有使用 CodeIgniter 的内置函数。代码中显示的所有内容都是 PHP 函数。如果您想利用内置 CI 功能,请查看@Boominathan Elango 链接的文档。

    从请求中获取文件:

    $file = $this-&gt;request-&gt;getFile('here_goes_input_name');

    如指定here

    使用 CI 功能移动文件:

    $file-&gt;move(WRITEPATH.'uploads', $newName);

    如指定here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-14
      • 2023-01-22
      • 2012-04-14
      • 2016-03-11
      • 2015-06-10
      • 2013-08-05
      • 2014-11-12
      相关资源
      最近更新 更多