我写了一个控制器上传文件到一个目录。我想如果一个文件已经存在于该目录中,在移动之前,文件名要通过增加一个单位从最后一个类似的存在的文件名改变,像这样:
test.jpg
test(1).jpg
test(2).jpg
这是我的控制器的主体
$fileName = $file->getClientOriginalName();
$fileExt = $file->getClientOriginalExtension();
$destinationFolder = public_path('upload/userfiles/');
$num = 1;
$newName = $fileName;
while (file_exists($destinationFolder . $newName )) {
$newName = $fileName. '(' . $num . ')';
$num ++;
}
$file->move($destinationFolder, $newName . '.' . $fileExt);
但这不能正常工作,创建的文件名如下:
test.jpg
test(1).jpg
test(1)(2).jpg
4条答案
按热度按时间dfty9e191#
你问题是:
$newName = $fileName;
一开始是test.jpg,然后添加($num++)
,使其成为test(1).jpg下一次它仍然是test(1).jpg,并且您附加了
($num++)
,那么它将变成test(1)(2).jpg就是这样
dw1jzc5e2#
这将起作用:
vmpqdwk33#
这对我很有效:
lndjwyie4#
我创建了一个简单的helper函数,用于生成文件名: