我正在使用yii\web\UploadedFile按照文档上传excel和csv文件。上传工作非常顺利,但是我遇到了一些奇怪的问题,我不知道如何修复。
1.我已经明确说明我的规则,允许xls,xlsx和csv. ---〉xls和xlsx上传没有任何问题,但csv文件抛出“只有这些扩展名的文件被允许:xlsx,xls和csv。”错误。我100%确定我上传的是csv文件。有什么特殊原因吗?如何修复?目前,我已经做了一个变通方案,删除了我的规则扩展名,并在扩展名不是xls,xlsx或csv时显示一个错误消息,但我更喜欢它,如果我可以使用默认的规则。
- I mainly use files with japanese filenames. i.e.: テスト0001.xlsx and テスト0001.csv. When I try to echo or dump the filename generated on yii, I get the correct filename but when I check uploads folder, the filename changes to something like: 陬ス蜩√.xlsx. So far, I have tried using iconv to set charset to UTF8 with no luck. I've also tried hardcoding the filename just to check if it has something to do with the actual file but still same results. How can I retain the original filename when uploading the file?
2条答案
按热度按时间oxf4rvwz1#
这是因为
FileValidator
中有checkExtensionByMimeType
选项。默认设置为true
,它验证文件扩展名是否与文件MIME类型匹配。对于csv
文件,MIME通常为text/plain
,这会导致验证错误。解决方法是将
checkExtensionByMimeType
设置为false
以进行此类文件上传。请参阅discussion about this。
2.您使用的是什么版本的Yii?在Yii 2.0.10中,文件下载的issue with wrong UTF-8 names encoding问题已经得到修复。
如果不是旧版本的情况,或者此问题对保存的文件名没有影响,则可能是您的ICU版本存在问题。
通过运行Yii 2主项目文件夹中的
requirements.php
来检查ICU版本,并查找ICU部分。wqnecbli2#
我花了一些时间来处理类似的问题,只有xlsx的mimeType在后端没有验证,即使在设置:
'mimeTypes'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
我不得不添加一个双重检查只为xlsx文件类型如下:完整示例可在此处找到:https://yii2-framework.readthedocs.io/en/stable/guide/input-file-upload/
希望这对你有帮助。