主要参考:https://www.yiichina.com/doc/guide/2.0/input-file-upload
1.validate()方法似乎不能验证.docx、.xlsx扩展名,如要上传这种文件,可能不能使用这个方法作为if的条件。但说到底少了一个验证心里还是会不安稳,这里应该是有更好的解决办法吧?
2.上传文件名为中文的文件时,倒腾半天之后最终有效的方法是这样的(model中的upload()方法)
foreach ($this->uploadFile as $file)
{
$file->saveAs(iconv("UTF-8","gb2312",UPLOAD_FILE_URL.$file->baseName.".".$file->extension));
}
3.多文件上传,除了主要参考中指出的操作外,还需要作以下修改:
上传单文件的情况
<?= $form->field($model,'uploadFile')->fileInput()->label('请选择你要上传的文件:')?>
上传多文件的情况(注意field()中的'uploadFile')
<?= $form->field($model,'uploadFile[]')->fileInput(['multiple' => true,])->label('请选择你要上传的文件:')?>
2019.1.23更新:既然有上传,就必然有下载,下载可以这么搞
public function actionDownload($id)
{
$query = FileImport::find()
->where('id = :id',[':id' => $id])
->one();
return \Yii::$app->response->sendFile(iconv("UTF-8","gb2312",UPLOADY_FILE_URL.$query->name),$query->name);
}
iconv()主要是在中文环境中适配中文文件名。
注意:sendFile()中的第二个参数不可以少,虽说文档中说它可由第一个参数赋缺省值,但实际应用中发现缺了它会带来一些匪夷所思的问题。