Laravel 上传文件时只存储文件名

Laravel Store only filename when uploading a file

我有以下代码来上传和存储文件。

$user->update([
        'display_profile' => request()->display_profile->storeAs('avatars', $name,'public')
]);

这会将 display_profile 中的文件存储为 avatars/filename.jpg

由于我有多个版本的文件用于在视图周围显示,因此我使用了 follow

这样的前缀

thumb_filename.jpg

small_filename.jpg

large_filename.jpg

我将需要进行大量字符串替换以插入前缀以显示图像的正确版本。无论如何,我可以只将文件名保存在数据库中而不是完整路径吗?

如果不是,在视图中显示我的文件的最佳方式是什么?

当您从请求中检索文件时,这将被转换为 UploadedFile 对象。您可以按照以下方式轻松检索原始名称

$file = $request->display_profile;

$user->update([
    'display_profile' => $file->getClientOriginalName()
]);

对于你的第二个问题,我建议你创建一个与 Image class 的关系,你可以在其中存储你需要的所有图像转换。但这可能有点棘手,可能需要时间进行编码。幸运的是,有大量的库可以为您处理这个问题。我最喜欢的是 Laravel medialibrary

我主要使用这种方法:

$file  = $request->file('display_profile');

$name = $file->getClientOriginalName() . '.' . $file->extension();

$file->storeAs('public/avatars', $name);

$user->update([
     'display_profile' => $name
]);