Laravel 5 |文件上传-如果文件存在,则在文件名中添加编号

Laravel 5 |文件上传-如果文件存在,则在文件名中添加编号,laravel,laravel-5,file-upload,request,Laravel,Laravel 5,File Upload,Request,我上传文件有问题。现在我有了这样的东西(控制器的一部分): 但保存到数据库时不添加唯一的数字:filename_0、filename_1等。它只保存$tmp_name的值 我做错了什么?我做了这样的事情: if($request->has('photos')) { foreach ($request->photos as $photo) { $file = $photo->getClientOriginalName();

我上传文件有问题。现在我有了这样的东西(控制器的一部分):

但保存到数据库时不添加唯一的数字:filename_0、filename_1等。它只保存$tmp_name的值


我做错了什么?

我做了这样的事情:

if($request->has('photos')) {
            foreach ($request->photos as $photo) {
                $file = $photo->getClientOriginalName();
                $filename = pathinfo($file, PATHINFO_FILENAME).'_'.Str::random(6);
                $extension = pathinfo($file, PATHINFO_EXTENSION);
                $fullfilename = $filename .'.'. $extension;
                $photo->storeAs('public/photos/',$fullfilename);
                Photo::create([
                    'page_id' => $page->id,
                    'filename' => $fullfilename
                ]);
            }
        }

你应该把时间放在上面()。无论如何,您的while循环条件应该检查$tmp\u name,我相信。那么以后如何在blade中显示没有时间的文件名?只需在上次
\u
之前获取子字符串。好的,谢谢您的解决方案
Str::random(6)
不是完全可靠的。但是如果我多次上传文件,则“时间”不会通过,因为有时我会上传一个同名文件,它会重复“时间”。然后会弹出一个错误。
time()
是PHP中的一个函数,如果您在代码中多次使用它,它就不能是相同的。有很多方法可以实现独特性,但这一种看起来最简单。
if($request->has('photos')) {
            foreach ($request->photos as $photo) {
                $file = $photo->getClientOriginalName();
                $filename = pathinfo($file, PATHINFO_FILENAME).'_'.Str::random(6);
                $extension = pathinfo($file, PATHINFO_EXTENSION);
                $fullfilename = $filename .'.'. $extension;
                $photo->storeAs('public/photos/',$fullfilename);
                Photo::create([
                    'page_id' => $page->id,
                    'filename' => $fullfilename
                ]);
            }
        }