📜  laravel 模型上传的文件名 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:37.616000             🧑  作者: Mango

Laravel 模型上传的文件名

在 Laravel 中,模型上传文件是一项非常普遍的任务,但是有时候我们需要在上传文件时更改文件名。本文将介绍如何使用 Laravel 模型上传文件并更改文件名。

使用模型上传文件

要使用模型上传文件,您需要在模型中使用 Illuminate\Http\UploadedFile 类型的字段。在数据库迁移文件中,您可以使用以下代码创建一个文件上传字段:

Schema::create('your_table', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('file_name');
    $table->timestamps();
});

在模型中定义文件上传字段:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;

class YourModel extends Model
{
    protected $fillable = ['file_name'];

    public function uploadFile(UploadedFile $file)
    {
        $file_name = $file->hashName();
        $path = $file->storeAs('your_folder', $file_name);
        $this->file_name = $file_name;
        $this->save();
        return $this;
    }
}

hashName() 方法将根据文件内容自动生成唯一的文件名,并且 storeAs() 方法可以将文件存储到指定的目录中。

更改文件名

如果您需要更改上传文件的文件名,您可以使用 storeAs() 方法来指定使用不同的文件名存储文件。例如:

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{
    protected $fillable = ['file_name'];

    public function uploadFile(UploadedFile $file)
    {
        $extension = $file->getClientOriginalExtension();
        $file_name = Str::random(40).'.'.$extension;
        $path = $file->storeAs('your_folder', $file_name);
        $this->file_name = $file_name;
        $this->save();
        return $this;
    }
}

在这个例子中,我们使用原始文件扩展名和随机生成的文件名来保存上传文件。

结论

在本文中,我们介绍了如何使用 Laravel 模型上传文件并更改文件名。无论是使用自动生成的文件名还是自定义的文件名,您都可以使用 storeAs() 方法来存储上传文件。