diff --git a/library/think/File.php b/library/think/File.php index 58af987e..f5e5470d 100644 --- a/library/think/File.php +++ b/library/think/File.php @@ -23,6 +23,25 @@ class File extends SplFileObject // 文件上传命名规则 protected $rule = 'date'; + // 上传文件信息 + protected $info; + + public function __construct($filename, $info = []) + { + parent::__construct($filename); + $this->info = $info; + } + + /** + * 获取上传文件的信息 + * @param string $name + * @return array|string + */ + public function getInfo($name = '') + { + return isset($this->info[$name]) ? $this->info[$name] : $this->info; + } + /** * 检查目录是否可写 * @param string $path 目录 @@ -139,7 +158,7 @@ class File extends SplFileObject } } if (!strpos($savename, '.')) { - $savename .= '.' . $this->getExtension(); + $savename .= '.' . pathinfo($this->getInfo('name'), PATHINFO_EXTENSION); } } elseif ('' === $savename) { $savename = $this->getFilename(); diff --git a/library/think/Input.php b/library/think/Input.php index 5d37fedf..848be817 100644 --- a/library/think/Input.php +++ b/library/think/Input.php @@ -216,32 +216,38 @@ class Input { $files = $files ?: (isset($_FILES) ? $_FILES : []); if (!empty($files)) { + // 处理上传文件 + $array = []; + $n = 0; + foreach ($files as $key => $file) { + if (is_array($file['name'])) { + $keys = array_keys($file); + $count = count($file['name']); + for ($i = 0; $i < $count; $i++) { + $array[$n]['key'] = $key; + foreach ($keys as $_key) { + $array[$n][$_key] = $file[$_key][$i]; + } + $n++; + } + } else { + $array = $files; + break; + } + } + if ('' === $name) { // 获取全部文件 - $file = []; - foreach ($files as $name => $val) { + $item = []; + foreach ($array as $key => $val) { if (empty($val['tmp_name'])) { continue; } - if (is_array($val['tmp_name'])) { - foreach ($val['tmp_name'] as $item) { - $file[] = new File($item); - } - } else { - $file[] = new File($val['tmp_name']); - } - } - return $file; - } elseif (!empty($files[$name]['tmp_name'])) { - if (is_array($files[$name]['tmp_name'])) { - $file = []; - foreach ($files[$name]['tmp_name'] as $item) { - $file[] = new File($item); - } - return $file; - } else { - return new File($files[$name]['tmp_name']); + $item[$key] = new File($val['tmp_name'], $val); } + return $item; + } elseif (isset($array[$name])) { + return new File($array[$name]['tmp_name'], $array[$name]); } } return null;