解决自己对File::move()方法的疑惑

先看一下教程中的 ImageUploadHandlersave() 方法:#

<?php
...
class ImageUploadHandler
{
    ...
    public function save($file,$folder,$file_prefix){
        $folder_name = 'uploads/images/'.$folder.'/'.date('Ym/d',time());
        $upload_path = public_path().'/'.$folder_name;
        $extension = strtolower($file->getClientOriginalExtension()) ? : 'png';
        $filename = $file_prefix .'_'.time().'_'.Str::random(10).'.'.$extension;
        if(!in_array($extension, $this->allowed_ext)){
            return false;
        }
        $file->move($upload_path,$filename);
        ...
    }
}

学习时的疑惑#

关于这条语句 $file->move($upload_path,$filename);move方法
一开始我在文档中找到了 move()方法,但是不是 File类的方法,而是 Storage类的方法:

Storage::move('old/file.jpg', 'new/file.jpg');

其次我在这篇文章中学习到,File::move()Storage::move() 的功能应该是一样的。
File::move() 的语法:

File::move(from_path, to_path);

功能:

move 方法则可以重命名或移动一个已经存在的文件到新位置。

回到 $file->move($upload_path,$filename); 语句上来:
$filename 好理解:生成地新的图片名。
但是 $upload_path 是什么呢?打印一下就知道了:

"/home/vagrant/code/larabbs/public/uploads/images/avatar/202203/03"

是文件夹的名称。
疑惑就来了:根据 move 的字面意思,应该是把一个原来的图片的完整路径移动到新的路径。但是 $upload_path 是一个文件夹啊。
看了很多篇文章,还是没有解决我的疑惑,直到看到了这篇文章 Laravel file 上传文件信息获取,才发现出发点就错了。

$file->move () 方法#

  1. 语法:
    $path=$file->move(path,newname);
  2. 参数:
    • 参数 1:文件移到哪个文件夹下的路径。
    • 参数 2:将上传的文件重新命名的文件名。
  3. 功能:将缓存在 tmp 目录下的文件移到某个位置,返回的是这个文件移动过后的路径

造成疑惑的主要原因:#

  1. 没查对文档。
  2. 受到之前的经验的影响。之前在用原生的 php 实现文件上传时有这样一段代码:move_uploaded_file($_FILES['pic']['tmp_name'], target)。目的在于将上传的文件移动到新位置。我以为这里的 move 方法也是一样的。

参考:#

  1. Laravel Move File from One Folder to Another Example
  2. Laravel file 上传文件信息获取
  3. laravel 接收上传文件获取各种文件名和信息
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。