使用Angular6-YII2上传图像和文本



我正在尝试创建带有文本输入的表单,并使用angular6的angular6和yii2 in an yii2为服务器端创建一个表单。

角服务:

create(name: string, image: any): Observable<any> {
  let url = this.baseUrl + 'create';
  let form: FormData = new FormData();
  form.append('image', image);
  form.append('name', name);
  return this.http.post<Notification>(url, form);
}

yii控制器:

public function beforeAction($action) 
{ 
    $this->enableCsrfValidation = false;
    return parent::beforeAction($action); 
}
public function actionCreate()
{
    $model = new MapCreationFormModel();
    if ($model->load(Yii::$app->request->post()))
    {
        $model->image = UploadedFile::getInstance($model, 'image');         
        $response = MapRepository::create($model->name, $model->image);
        return json_encode($response);
    }
    else
    {
        // >>> This exception is thrown.
        throw new Exception("Cannot bind model");
    }
}

yii模型:

class MapCreationFormModel extends Model
{
    public $name;
    public $image;
}

使用提琴手,我可以看到我的请求:

------- webkitformboundaryiv0dyba9zkwrhxlu content-disposition:form-data;名称="图像";filename =" test.bmp" content-type:image/bmp

bm [[[特殊字符]]

------- webkitformboundaryiv0dyba9zkwrhxlu content-disposition:form-data;名称="名称"

aa

------- webkitformboundaryiv0dyba9zkwrhxlu-

不幸,异常'异常("不能绑定模型"(从我的控制器抛出(请参阅控制器代码(。

您是否知道为什么我的模型不能被束缚?

我终于找到了这篇文章的问题:yii2 post图像在没有yii2命名约定的API中进行模型。

我必须使用方法UploadedFile::getInstanceByName

这是我为有兴趣的人提供的代码:

public function actionCreate()
{
    $name = Yii::$app->request->post('name'); 
    $fileData = UploadedFile::getInstanceByName('image');
    $fileName = time() . '.' . $fileData->extension;
    $filePath = '../uploads/' . $fileName;
    $fileData->saveAs($filePath);
    $image = fopen($filePath,"rb");
    // Do your stuff.
}

最新更新