更改文件名Laravel 4

时间:2013-06-24 18:32:25

标签: php laravel laravel-4

如何更改Laravel 4中上传文件的名称。 到目前为止,我一直在这样做:

$file = Input::file('file'); 
$destinationPath = 'public/downloads/';
if (!file_exists($destinationPath)) {
    mkdir("./".$destinationPath, 0777, true);
}
$filename = $file->getClientOriginalName();

但是,如果我有2个同名文件,我想它会被重写,所以我希望在第二个文件名的末尾添加(2)之类的东西,或者完全改变文件名

2 个答案:

答案 0 :(得分:3)

第一步是检查文件是否存在。如果没有,请使用pathinfo()提取文件名和扩展名,然后使用以下代码重命名:

$img_name = strtolower(pathinfo($image_name, PATHINFO_FILENAME));
$img_ext =  strtolower(pathinfo($image_name, PATHINFO_EXTENSION));

$filecounter = 1; 

while (file_exists($destinationPath)) {
    $img_duplicate = $img_name . '_' . ++$filecounter . '.'. $img_ext;
    $destinationPath = $destinationPath . $img_duplicate;  
}

只要条件file_1返回true,循环就会继续将文件重命名为file_2file_exists($destinationPath)等。

答案 1 :(得分:1)

我知道这个问题已经关闭,但这是一种检查文件名是否已被占用的方法,因此原始文件不会被覆盖:

(......在控制器中......)

$path = public_path().'\\uploads\\';
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$original_filename = pathinfo($fileName, PATHINFO_FILENAME);
$new_filename = $this->getNewFileName($original_filename, $extension, $path);
$upload_success = Input::file('file')->move($path, $new_filename);

此功能获得"未使用"文件名:

public function getNewFileName($filename, $extension, $path){
    $i = 1;
    $new_filename = $filename.'.'.$extension;
    while( File::exists($path.$new_filename) )
        $new_filename = $filename.' ('.$i++.').'.$extension;
    return $new_filename;
}