关于文件上传的杂七杂八

主要参考: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()中的第二个参数不可以少,虽说文档中说它可由第一个参数赋缺省值,但实际应用中发现缺了它会带来一些匪夷所思的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值