首页 > 解决方案 > Laravel 图像路径存储为 .tmp

问题描述

我正在尝试将图像存储在数据库中:

   public function update(Request $request, $id)
   {

       if ($request->hasFile('image')) {
           $image = $request->file('image');
           $filename = time() . '.' . $image->getClientOriginalExtension();
           $path = 'storage/images/' . $filename;
           Image::make($image->getRealPath())->resize(300, 300)->save($path);
       }

       $this->productservice->update($request, $id);


       return redirect()->back()->with('status', 'Product has been updated succesfully');
   }

我以前在 Laravel 中做过,从来没有遇到过问题。这次我使用的是 Repository-Service 模式,但不确定这是否是导致问题的原因。图像本身被移动到正确的文件夹中,但是数据库中的路径是:

C:\xampp\tmp\php596F.tmp

我已经用谷歌搜索/检查了关于 stackoverflow 的其他建议来解决这个问题,但没有一个有效。

更新 愚蠢的我,我应该从模型的可填充中删除图像,它甚至大部分时间都没有节省任何东西。

标签: laravelimagephp-7.3

解决方案


原因:问题是上传图片时您的请求数据没有更改。所以image仍然包含tmpdata


如何修复:确保您添加multipart/form-dataform. 在您的控制器中进行验证以确保上传的文件是图像,如下所示:

public function update(Request $request, $id)
   {

     $validatedData = $request->validate([
        'image' => 'required|image|mimes:jpeg,jpg,png,gif',
       ]);

       if ($request->hasFile('image')) {
           $image = $request->file('image');
           $filename = time() . '.' . $image->getClientOriginalExtension();
           $path = 'storage/images/' . $filename;
           Image::make($image->getRealPath())->resize(300, 300)->save($path);
           $request->replace(['image' => $path]);
       }

       //$request['image'] = $filename;
       

       $this->productservice->update($request, $id);

       return redirect()->back()->with('status', 'Product has been updated succesfully');
   }

推荐阅读