Rest API yii2中的文件上传

Jac*_*had 2 rest yii2

我的控制器文件在 api/v1/controller/

class ProfileController extends ActiveController
  {
    public $modelClass = 'app\models\Profile';

    public function behaviors()
    {
        return [
            [
                'class' => 'yii\filters\ContentNegotiator',
                'only' => 
                         ['index', 'view', 'createnew','update','search'],
                'formats' => 
                         ['application/json' => Response::FORMAT_JSON,],

            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'index' => ['get'],            
                    'view' => ['get'],            
                    'createnew' => ['post'],       
                    'update' => ['put'],         
                    'delete' => ['delete'],        
                    'deleteall' => ['post'],
                    'search' => ['get']
                ],

            ]
        ];
    }

    public function actionCreatenew() {
        $model = new Profile();
        $model->load(Yii::$app->request->post());



        $model->asset = UploadedFile::getInstance($model, 'asset');
     
        $name = $model->user_id;

        if($model->asset) {
            
          $model->asset->saveAs('uploads/'.$name.'.
                           '.$model->asset->extension);
            $model->asset = $model->asset->name.'.'.
                            $model->asset->extension;
           
        }



        if($model->save()) {
            echo json_encode(array('status'=>"Success",
                     'data'=>$model->attributes),JSON_PRETTY_PRINT);
        } else {
            echo json_encode(array('status'=>"Failure",
                     'error_code'=>400,
                     'errors'=>$model->errors),JSON_PRETTY_PRINT);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

当我尝试从 Postman 访问它时,例如:POST http://localhost/myapp/api/v1/profiles

我得到无效参数 – yii\base\InvalidParamException

响应内容不能是数组。

什么问题??帮助将不胜感激!!谢谢

Dhi*_*pta 9

您可以直接在 Yii2 控制器/动作中使用带有表单数据编码的 HTTP POST 在 Yii2 中轻松接收单个/多个上传的文件。

使用此代码:

    $uploads = UploadedFile::getInstancesByName("upfile");
    if (empty($uploads)){
        return "Must upload at least 1 file in upfile form-data POST";
    }

    // $uploads now contains 1 or more UploadedFile instances
    $savedfiles = [];
    foreach ($uploads as $file){
        $path = //Generate your save file path here;
        $file->saveAs($path); //Your uploaded file is saved, you can process it further from here
    }
Run Code Online (Sandbox Code Playgroud)

如果您使用 Postman API 客户端来测试 API 的工作方式,您可以将上传端点配置为这样用于多文件上传:

POST 数据请求的正文表单数据参数

注意upfile[]方括号很重要!Postman 很乐意让您在一个插槽中选择多个文件进行上传,但这实际上不起作用。按照屏幕截图中显示的方式执行此操作,通过该UploadedFile机制将一组文件提供给 Yii2 操作。这大致相当于标准的 PHP$_FILES超全局变量,但更容易处理。

单个文件可以带或不带[]键名后的方括号上传。当然,您可以upfile根据约定命名任何您喜欢的名称。