如何更改Laravel 4中上传文件的名称。 到目前为止,我一直在这样做:
$file = Input::file('file');
$destinationPath = 'public/downloads/';
if (!file_exists($destinationPath)) {
mkdir("./".$destinationPath, 0777, true);
}
$filename = $file->getClientOriginalName();
但是,如果我有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_2
,file_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;
}