解决自己对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 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!