Yii2:设置csvfile upload规则,保留原文件名

我正在使用yii \ web \ UploadedFile上传excel和csv文件。 上传工作完全正常,但是,我遇到了一些奇怪的问题,我不知道如何解决。

  1. 我在我的规则上明确表示允许xls,xlsx和csv。 —> xls和xlsx上传没有任何问题,但csv文件抛出“只允许具有这些扩展名的文件:xlsx,xls和csv。 错误。 我100%确定我正在上传一个CSV文件。 这有什么特别的原因吗? 如何解决? 现在,我已经做了一个解决方法,通过删除我的规则扩展和显示错误消息时扩展不是xls,xlsx或csv,但我更喜欢它,如果我可以使用规则的默认值。

  2. 我主要使用日文文件名。 即:テスト0001.xlsx和テスト0001.csv。 当我尝试回显或转储在yii上生成的文件名时,我得到正确的文件名,但是当我检查上传文件夹时,文件名变成类似于:陬ス蜩√.xlsx。 到目前为止,我已经尝试使用iconv将字符集设置为UTF8,但没有运气。 我也尝试过对文件名进行硬编码,以检查它是否与实际文件有关,但仍然是相同的结果。 上传文件时如何保留原文件名?

广告。 这是因为checkExtensionByMimeType中有checkExtensionByMimeType选项。 它默认设置为true ,并validation文件扩展名是否与文件的MIMEtypes匹配。 在csv文件的情况下,MIME通常是text/plain ,导致validation错误。

解决方法是为这种file upload设置checkExtensionByMimeTypefalse

看到关于这个的讨论 。

广告。 2.你使用的是什么版本的Yii? 在Yii 2.0.10中,文件下载的错误的UTF-8名称编码问题已得到解决。

如果这不是旧版本的情况下,或者这个问题没有对保存的文件名称的影响,也许这是你的版本的ICU的问题。
通过运行主Yii 2项目文件夹中的requirements.php来查看ICU版本,并查找ICU部分。