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