首页 > 解决方案 > 我正在尝试将图像上传到我在 laravel 中的目录(通过数据库访问它们)

问题描述

所以我查看了互联网和 StackOverflow 上的多篇文章,但我无法弄清楚。因此,当您制作new user表格时,您的表格列中不会有图像,您可以在您的个人资料设置中进行编辑。所以现在我正在尝试将图像添加到directorydatabase但我并没有让它太有效。我avatar在数据库中添加了一个(代表图像名称)为medium text.

我的表格

<form action="updateImage" method="post" enctype="multipart/form-data">
   @csrf
   <div class="modal-body">
   <label for="image" class="custom-image">
     <i class="fa fa-cloud-upload"></i> Select a file
   </label>
   <input id="image" type="file"/>
   </div>
   <div class="modal-footer">
       <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
       <button type="submit" class="btn btn-primary">Save changes</button>
   </div>
</form>

我的控制器

public function updateImage(Request $request)
    {

        $avatar = Auth::user()->id;

  
        if($request->hasfile('image'))
        {
            $file = $request->file('image');
            $extension = $file->getClientOriginalExtension();
            $filename = $file->getClientOriginalName();
            $file->move('uploads/face/', $filename);
            $avatar->avatar = $filename;
        }
        

        $avatar->save();
        
        return view('profile');
    }

我的路线

Route::post('/updateImage', 'HomeController@updateImage')->middleware('user');

我已经看了很多帖子,但仍然找不到解决方案。对我放轻松<3。

标签: databaselaravel

解决方案


您尝试$avatar在 Auth::user() (一个类)的属性上调用 save 方法,这只是用户的 ID。如果您无法理解如何保存 eloquent 模型,请查看此处的文档。

我也不太明白是什么$face,因为您从未定义过该变量,但您正在尝试对其调用方法。

您可能甚至不需要再次保存用户对象,因为您只是在更新图像。相反,您可以将文件保存在与用户唯一标识符对应的目录中。就像是:

 if($request->hasfile('image'))
    {
        $file = $request->file('image');
        $extension = $file->getClientOriginalExtension();
        $filename = $file->getClientOriginalName();
        $file->move('uploads/face/'.Auth::id().'/', $filename . $extension);
    }

第一次上传可以正常工作。对于其他上传,您必须检查用户是否已有头像,然后删除该文件并用新文件替换它。

如果您想将文件名保存为数据库中用户的属性,则必须首先更新迁移以添加该文件名的属性。然后是这样的:

 $filename; 

 if($request->hasfile('image'))
    {
        $file = $request->file('image');
        $extension = $file->getClientOriginalExtension();
        $filename = $file->getClientOriginalName();
        $file->move('uploads/face/', $filename . $extension);
    }
    $user = Auth::user();
    $user->avatar = $filename;
    $user->save();

可以正常工作。

希望这可以帮助。我建议观看 Laravel 的视频教程,因为这些对我有很大帮助。


推荐阅读