求助一个关于表单的问题 [ 2.0 版本 ]
一个上传文件的表单,只有一个上传文件的 input 的时候,一切正常,文件也可以正常上传,但是一旦加上一个 text input 用于输入文字,就无法正常工作了,打开debug 看,request body 是空的,但是$_post 和
$_file 都是有内容的,想请教下是怎么回事?应该怎么解决,先谢谢了。
共 2 个回答
-
能把代码放出来吗?
共 1 条回复感谢你的关注,提前祝你春节愉快^_^
下面是我学写的代码,如果有时间麻烦替我看下,先谢谢了。
File :UploadfilesForm.php...
class UploadfilesForm extends Model
{public $videoFile; public $videoName; public $videoCategory; public $videoCover; public function rules(){ return [ [['videoFile'],'file', 'extensions'=>['jpg','mp4','rmvb']], [['videoName'],'required'], //[['videoCategory'],'required'], //[['videoCover'],'file','extensions'=>['jpg','png','gif']] ]; }//rules() public function upload(){ $strUrl = '/video/' . $this->videoFile->baseName . '.' . $this->videoFile->extension; if($this->validate()){ $this->videoFile->saveAs($strUrl); return TRUE; } else{ return FALSE; } }//upload()
}//class UploadfilesForm extends Model
File : UploadfilesController.php
...
class UploadfilesController extends Controller
{public function actionUpload(){ //$enableCsrfValidation = FALSE; $model = new UploadfilesForm(); if(Yii::$app->request->isPost){ $model->videoFile = UploadedFile::getInstance($model, 'videoFile'); if($model->upload()){ echo '文件上传成功'; return exit('文件上传成功'); } }//if(Yii::$app->request->isPost) return $this->render('uploadvideos',['model'=>$model]); }//public function actionUpload()
}//class UploadfilesController extends Controller
File : uploadvideos.php
<?php
use yii\widgets\ActiveForm;?>
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?php echo $form->field($model, 'videoName')->textInput()->hint('请输入电影名称(不是文件名),不要包含扩展名。')->label('电影名称:'); ?> <?php //echo $form->field($model, 'videoCategory')->dropDownList(['dzp'=>'动作片','jqp'=>'剧情片','znl'=>'正能量'], ['prompt'=>'请选择','style'=>'width:120px'])->label('请选择影视类型'); ?> <?php echo $form->field($model, 'videoFile')->fileInput()->hint('请注意:仅支持扩展名为 mp4 的影视文件。')->label('影视文件:'); ?> <?php //echo $form->field($model, 'videoCover')->fileInput()->hint('请选择海报文件。')->label('影视海报:'); ?> <button>上传影视</button>
<?php ActiveForm::end() ?>
<p><hr></p>
-
这个问题,困扰我好久了,借着过年,用了两天好好研究了一下,终于搞明白了。
以下是我研究过程中写的备忘录,写作水平太水,你可以借鉴一下。
???上传文件时,调用saveAs()方法,传入的路径中,使用$model->photo->name,报错failed to open stream。
经过研究发现:文件名为中文,改成英文或数字都正常上传。待研究处理。
经过一天研究:此问题原因为编码引发的“血案”,windows默认编码为GBK(查看方法:开始->cmd->chcp,然后显示一个数字:如936,则代表是GBK简体中文),Linux 系统本身就是使用 UTF-8 来编码的,yii2.0编码格式为utf-8。
在上传文件后,一般都会用 move_uploaded_file() 进行文件移动改名。但是 move_uploaded_file() 并不支持 UTF-8 编码,如果含有,那么函数就会执行失败,但是这个函数是支持 GB2312 或者是 GBK 编码的,在调用move_uploaded_file()方法前,通过mb_convert_encoding ( string $str , string 转换后,string 转换前),在存入数据库时,使用此函数转化为utf-8保存。Jooseph 觉得很赞
sk811229
最后登录:2022-10-06
在线时长:16小时47分
- 粉丝0
- 金钱770
- 威望10
- 积分1030