
本文旨在帮助 Laravel 开发者解决在多文件上传时,因文件名重复导致程序崩溃的问题。通过在文件名生成过程中引入自增变量,确保即使在同一时刻上传相同名称的文件,也能避免冲突,保证上传过程的顺利进行。本文将提供详细的代码示例和注意事项,帮助你轻松解决这个问题。
在 Laravel 应用中,处理文件上传是一个常见的需求。然而,当用户尝试同时上传多个同名文件时,可能会引发问题,导致程序崩溃。这是因为默认情况下,如果使用相同的文件名保存文件,后续上传的文件会覆盖之前的文件,在高并发场景下,容易出现数据丢失或者程序异常。本文将介绍一种简单有效的解决方案,通过在文件名中加入时间戳和自增变量,确保每个上传的文件都有唯一的文件名。
核心思路是在生成文件名时,结合当前时间戳和一个自增变量,确保即使在极短的时间内上传多个同名文件,也能得到不同的文件名。
以下是一个修改后的 listingSave 方法示例:
public function listingSave(Request $request) {
if($request->hasFile('files')){
$files = $request->file('files');
$i = 0;
foreach ($files as $file) {
$originalName = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$image_name = date('mdYhis').'_'.$i.'_'.$originalName;
// 将文件存储到 public/images 目录下
$file->move(public_path('images'), $image_name);
// 或者使用 Storage facade
// Storage::disk('public')->put('images/'.$image_name, file_get_contents($file));
// 保存文件信息到数据库
$fileModel = new FileModel();
$fileModel->name = $image_name;
$fileModel->sort_order = $i; // 或者其他逻辑
$fileModel->created_at = now();
$fileModel->updated_at = now();
$fileModel->created_by_id = 0; // 或者 Auth::user()->id
$fileModel->disk_id = 1;
$fileModel->folder_id = 1;
$fileModel->extension = $extension;
$fileModel->size = $file->getSize();
$fileModel->mime_type = $file->getMimeType();
$fileModel->entry_type = "Anomaly\Streams\Platform\Model\Files\FilesImagesEntryModel";
// 获取图片尺寸
list($width, $height) = getimagesize(public_path('images/'.$image_name));
$fileModel->height = $height;
$fileModel->width = $width;
$fileModel->save();
// 关联到 truckian_products_image 表
DB::table('truckian_products_image')->insert(['entry_id'=>$p_id,'file_id'=>$fileModel->id,'sort_order'=>$i+1]);
$i++;
}
foreach($available as $key => $value)
DB::insert('insert into default_truckian_mileage_gap(mileage_gap,number_of_products,truck_id)values (?, ?, ?)',[$key,$value,$p_id]);
}
}代码解释:
注意事项:
通过在文件名生成过程中引入时间戳和自增变量,可以有效地避免 Laravel 应用中多文件上传时文件名冲突的问题。在实际开发中,可以根据具体需求调整文件名生成的策略,例如使用 UUID 等更复杂的方式生成唯一文件名。同时,需要注意文件上传的安全性,防止恶意攻击。
以上就是Laravel 中防止上传同名文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号