我正在使用 yii\web\UploadedFile 按照文档上传 excel 和 csv 文件。上传工作得很好,但是,我遇到了几个奇怪的问题,我不知道如何解决。
我已经在我的规则中明确说明允许使用 xls、xlsx 和 csv。---> xls 和 xlsx 上传没有任何问题,但 csv 文件抛出“只允许具有这些扩展名的文件:xlsx、xls 和 csv。” 错误。我 100% 确定我正在上传 csv 文件。发生这种情况有什么具体原因吗?如何修复?目前,我已经通过删除规则中的扩展名并在扩展名不是 xls、xlsx 或 csv 时显示错误消息来解决方法,但如果我可以使用规则中的默认值,我更喜欢它。
我主要使用日文文件名的文件。即: ???????.xlsx 和 ???????.csv。当我尝试回显或转储在 yii 上生成的文件名时,我得到了正确的文件名,但是当我检查上传文件夹时,文件名更改为类似:????.xlsx。到目前为止,我已经尝试使用 iconv 将字符集设置为 UTF8,但没有成功。我也试过硬编码文件名只是为了检查它是否与实际文件有关,但结果仍然相同。上传文件时如何保留原始文件名?
广告。1.这是因为checkExtensionByMimeType
选择的FileValidator
。它true
默认设置为,并验证文件扩展名是否与文件 MIME 类型匹配。对于csv
文件,MIME 通常text/plain
是导致验证错误的原因。
解决的办法是设置checkExtensionByMimeType
来false
对这种文件上传。
广告。2. 你用的是什么版本的Yii?在 Yii 2.0.10 中,文件下载的UTF-8 名称编码错误的问题已得到修复。
如果旧版本不是这种情况,或者此问题对保存的文件名没有影响,那么这可能是您的 ICU 版本的问题。
通过运行requirements.php
Yii 2 主项目文件夹中的 并查找 ICU 部分来检查您的 ICU 版本。