1

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

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

但是,如果我有 2 个同名文件,我猜它会被重写,所以我想(2)在第二个文件名的末尾添加类似的内容或完全更改文件名

4

2 回答 2

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;  
}

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

于 2013-06-24T18:47:48.893 回答
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;
}
于 2014-06-29T04:00:33.060 回答