📅  最后修改于: 2023-12-03 15:02:37.616000             🧑  作者: Mango
在 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()
方法来存储上传文件。