看了下上传类的代码:

循环多文件的时候都会使用
$savename = $this->getSaveName($file);
如果使用默认的命名规则那么在同一时间就会生成相同的文件名从而产生文被件覆盖的情况,由于上传多个小文件几乎是在同一时间完成的,所以也就产生了后面的文件把前面文件覆盖的问题了,所以会产生文件丢失。
知道原因那么就好解决了。
我是这样解决的,不想自己写命名规则的可以看下,很简单的只要改两行代码,
$savename = $this->getSaveName($file);改成
$savename = $this->getSaveName($file,$key);
也就是方法里面加一个参数$key($key就是循环里的键名)
private function getSaveName($file,$key) {
$rule = $this->saveName;
if (empty($rule)) { //保持文件名不变
/* 解决pathinfo中文文件名BUG */
$filename = substr(pathinfo("_{$file['name']}", PATHINFO_FILENAME), 1);
$savename = $filename;
} else {
$savename = $this->getName($rule, $file['name']);
if(empty($savename)){
$this->error = '文件命名规则错误!';
return false;
}
}
这个函数里面的
$savename = $this->getName($rule, $file['name']);改成
$savename = $this->getName($rule, $file['name']).$key;
也就是命名后面加了一个文件数组的一个键名,这样就避免了重复
最佳答案
