2015-11-22 6 views
0

Я написал контроллер для загрузки файлов в каталог. и я хочу, если файл уже существует в этой директории, прежде чем двигаться, чтобы имя файла было изменено приращение одной единицы из последнего аналогичного существующего имени файла, как это:auto приращение имен файлов при их загрузке в laravel

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 
+0

Можете ли вы показать, как построить '$ путь '. Похоже, что добавляющая часть не идет хорошо. –

+0

@adhesivee, я редактирую свой вопрос. –

+0

Какова ценность '$ name'? –

ответ

0

ваша проблема заключается в следующем:

$newName = $fileName; сначала это test.jpg тогда вы добавите ($num++) поэтому становится тест (1) .jpg

в следующий раз его еще тест (1) .jpg и вы добавите ($num++) тогда становится испытанием (1) (2) .jpg

Thats это

+0

Да, но как вы думаете, что является лучшим решением? –

0

Это будет работать:

$fileName = $file->getClientOriginalName(); 
$fileExt = $file->getClientOriginalExtension(); 

$destinationFolder = public_path('upload/userfiles/'); 
$num = 1; 

$newName = $fileName; 

$appendNum = false; 
while (file_exists($destinationFolder . $newName)) { 
    $appendNum = true; 
    $num ++; 
} 
if ($appendNum) $newName = $fileName. '(' . $num . ')'; 
$file->move($destinationFolder, $newName . '.' . $fileExt); 
+0

ваш код для имени файла 'test.jpg', который еще не существует, создайте имя файла' test.jpg.jpg' –

+0

, так что исправьте его .. его очень просто –

Смежные вопросы