要想保存为中文文件名,首先,我们要了解一下操作系统的编码:当前我们用的windows系统简体中文版,编码为gb2312;而linux系统用的编码为utf-8。回显给浏览器时要统一用utf-8编码,就这么简单。
1、修改上传文件:
$imgName = "加油";
$info = $file->validate(['size'=>10240000])->move( '../public/signImgs/',$imgName);
2、修改文件:thinkphp/library/think/File.php。请添加以下红色文字。
找到setSaveName方法:将中文文件名转为utf-8输出给浏览器,大约在127行,加入
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$saveName = iconv('gbk', 'utf-8',$saveName);
}
$this->saveName = $saveName;
在364行加入:
$saveName = $this->buildSaveName($savename);
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$saveName = iconv('utf-8','gbk//IGNORE', $saveName);
}
然后再试一下,看看是不是可以上传了呢