【问题标题】:Laravel 5 | File upload - If file exists add number to filenameLaravel 5 |文件上传 - 如果文件存在,则在文件名中添加数字
【发布时间】:2021-07-06 05:26:36
【问题描述】:

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

if($request->has('photos')) {
            foreach ($request->photos as $photo) {
                $filename = $photo->getClientOriginalName();
                $tmp_name = $filename;

                if ($pos = strrpos($filename, '.')) {
                    $name = substr($filename, 0, $pos);
                    $ext = substr($filename, $pos);
                    
                } else {
                    $name = $filename;
                }

                $uniq_no = 0;
                while (file_exists($filename)) {
                    $tmp_name = $name .'_'. $uniq_no . $ext;
                    $uniq_no++;
                    
                }
                $photo->storeAs('public/photos/',$tmp_name);
                Photo::create([
                    'page_id' => $page->id,
                    'filename' => $tmp_name
                ]);
            }
        }

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

我做错了什么?

【问题讨论】:

  • 你应该只是附加时间()。无论如何,我相信你的 while 循环条件应该检查​​ $tmp_name。
  • 那么以后如何在blade中无时间显示文件名?
  • 只取最后一个_之前的子串。
  • 好的,感谢您的解决方案

标签: laravel laravel-5 file-upload request


【解决方案1】:

我做了这样的事情:

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

【讨论】:

  • Str::random(6) 不完全证明。
  • 但是如果我有多个文件,“时间”将不会过去,因为有时我会上传一个同名的文件,它会重复“时间”。然后弹出一个错误。
  • time() 是 PHP 中的一个函数,如果您在代码中多次使用它,它就不能相同。实现独特性的方法有很多,但这个看起来最容易处理。
猜你喜欢
  • 2018-09-17
  • 2022-12-11
  • 2012-08-24
  • 2017-02-10
  • 1970-01-01
  • 2017-11-08
  • 2021-08-26
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多