Php 使用PUT上传yii2restapi文件

Php 使用PUT上传yii2restapi文件,php,rest,yii2,Php,Rest,Yii2,我正在尝试在Yii2中添加一个restapi,供移动应用程序用于上传图像/音频文件。我试图使用PUT方法从http表单数据获取图像/文件数据,但由于某些原因,fopen(“php://input“,“r”);返回空流。我尝试了这个示例中给出的代码 下面是使用curl发送PUT的方法: curl -X PUT -d 'BLABLABLA' http://localhost/upload 然后在上载控制器中禁用csrf验证: \yii::$app->request->enableCsr

我正在尝试在Yii2中添加一个restapi,供移动应用程序用于上传图像/音频文件。我试图使用PUT方法从http表单数据获取图像/文件数据,但由于某些原因,fopen(“php://input“,“r”);返回空流。我尝试了这个示例中给出的代码


下面是使用curl发送PUT的方法:

curl -X PUT -d 'BLABLABLA' http://localhost/upload
然后在上载控制器中禁用csrf验证:

\yii::$app->request->enableCsrfValidation = false;
下面是使用您的代码执行的上载控制器操作示例:

public function actionIndex()
{
   \yii::$app->request->enableCsrfValidation = false;
   $putdata = fopen("php://input", "r");
   // make sure that you have /web/upload directory (writeable) 
   // for this to work
   $path = \yii::getAlias('@webroot')."/upload/myputfile.ext";

   $fp = fopen($path, "w");

   while ($data = fread($putdata, 1024))
      fwrite($fp, $data);

   /* Close the streams */
   fclose($fp);
   fclose($putdata);
}

检查上传:

$ cat /path/to/webroot/upload/myputfile.ext
BLABLABLA

自版本2.0.10以来,出现了一种内置机制,允许您将PUT与formData一起使用:

所以,首先需要将解析器添加到配置文件中

return [
    'components' => [
        'request' => [
            'parsers' => [
                'multipart/form-data' => 'yii\web\MultipartFormDataParser'
            ],
        ],
        // ...
    ],
    // ...
];
下一步-执行
getBodyParams
以填充$\u文件。这应该在请求任何文件之前执行

$restRequestData = Yii::$app->request->getBodyParams();
然后,文件可以通过常规方法获得:

$file = UploadedFile::getInstancesByName('photo');

你找到解决办法了吗?没有,我现在用post和REST?如果是,如何使用?使用我为帖子发布的上述代码(第二块)。我基本上把代码放在RESTAPI控制器类的actionUpload方法中。为了进行测试,您可以使用postman客户端(chrome扩展名),然后在URL参数中为文件名添加一个“data”变量,并选择要上载的照片。我不知道该解析器。谢谢你。
$restRequestData = Yii::$app->request->getBodyParams();
$file = UploadedFile::getInstancesByName('photo');