php 用curl发送文件到yi2控制器

omtl5h9j  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(147)

我想通过windows命令行发送一个带有curl的文件到yi2控制器。我的命令行脚本是这样的:

curl  -X POST -F "file=@G:\file.txt"  http://file.localhost/file-siakadbeta/upload

我的yii2控制器是这样的:

class FileSiakadbetaController extends Controller
 {
   public function actionUpload()
   {

    if ($_FILES && isset($_FILES['file'])) {
        $target_dir = "uploads/"; // Replace with your desired upload directory
        $target_file = $target_dir . basename($_FILES['file']['name']);
        
        // Check if the file already exists
        if (file_exists($target_file)) {
            return "File already exists.";
        } else {
            // Move the uploaded file to the target directory
            if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
                return "File uploaded successfully.";
            } else {
                return "File upload failed.";
            }
        }
    } else {
        return "No file uploaded.";
    }  
  }
}

问题是,我得到了回应

Bad Request (#400)

我尝试将curl命令发送到普通的php代码(不使用yi2框架),上传代码正常工作。
有什么需要帮忙的吗?

au9on6nz

au9on6nz1#

错误请求响应可能是POST请求中缺少CSRF令牌的结果。
默认情况下,Yii2期望所有POST请求包含有效的CSRF令牌。您可以通过将其$enableCsrfValidation属性设置为false来禁用此功能。例如:

class FileSiakadbetaController extends Controller
{
    public $enableCsrfValidation = false;

    public function actionUpload()
    {
         // ... action body ...
    }
}

或者,如果您只想为特定操作禁用CSRF验证,可以在beforeAction()回调中执行。

class FileSiakadbetaController extends Controller
{
    public function beforeAction($action)
    {
        if ($action->id == 'upload') {
            $this->enableCsrfValidation = false;
        }
        return parent::beforeAction($action);
    }

    public function actionUpload()
    {
         // ... action body ...
    }
}

在文档中查看有关CSRF保护的更多信息。

相关问题