【问题标题】:laravel Can't delete old image when uploaded new imagelaravel上传新图片时无法删除旧图片
【发布时间】:2021-08-22 14:53:01
【问题描述】:

为什么我上传新图片时无法删除旧图片?

这是我用来存储数据和图像的控制器。 我的文件图像名称存储在 nama_post_adps$imageName 的组合中,其中查询 getClientOriginalName();

  public function update(Request $request, Adopsi $adopsi, $id)
    {
        $getParentJenisHewan = JenisHewan::where("id", $request->jenis_hewan_id)->value("nama_jenis_hewan");
        $getParentRasHewan = RasHewan::where("id", $request->ras_hewan_id)->value("nama_ras_hewan");

        $imageSize = $request->file('image_post_adps')->getSize();
        $imageName = $request->file('image_post_adps')->getClientOriginalName();
        $pathstorage = $request->file('image_post_adps')->storeAs('public/post/adopsi',$request->nama_post_adopsi.'-'.$imageName);
       
        $adopsiAttr = $this->validasiRequest();
       
        $adopsiAttr = $request->all();
        $adopsiAttr['nama_jenis_hewan'] =  $getParentJenisHewan;
        $adopsiAttr['nama_ras_hewan'] = $getParentRasHewan;
        $adopsiAttr['image_post_adps'] = $imageName;
        $adopsiAttr['path-storage'] = $pathstorage;
        $adopsiAttr['size'] = $imageSize;
        
        $adopsi = Adopsi::find($id)->update($adopsiAttr);
        $delete = Adopsi::find($id);
        unlink('app/public/post/adopsi/'.$delete->nama_post_adopsi.'-'.$delete->image_post_adps);

        // if ($request->file('image_post_adps')) {
        //     Storage::disk('public')->delete('/post/adopsi/'.$request->nama_post_adopsi.'-'.$request->image_post_adps);
        // }

      

        if($adopsi) {
            return redirect()->route('adopsi.index')->with('success','Data '.$request->nama_post_adopsi .' telah mendapatkan update terbaru.');
        } else {
            return redirect()->route('adopsi.index')->with('error','Data gagal'.$request->nama_post_adopsi .'diupdate');

        }

    }

上面的方法与我的 store 方法完全相同。

我试过 unlink() 但它不能工作并显示 error : unlink('post/adopsi/..') no such file or directory ,但字段不能更新。然后我决定使用Storage::disk('public')->delete,字段得到更新,图像变化与新旧仍然相同。

【问题讨论】:

  • \Illuminate\Support\Facades\Storage::disk('public')->delete('post/adopsi/'.$delete->nama_post_adopsi.'-'.$delete->image_post_adps )
  • 如何简化您的建议?
  • 我的意思是简化代码
  • 从存储文件夹中删除文件的最简单代码
  • 不是我的意思,没有\Illuminate.....我怎么写?

标签: php laravel controller laravel-8


【解决方案1】:

你做错了。

首先获取现有数据并检查请求是否有文件然后删除旧文件然后更新它

        $delete = Adopsi::find($id);
     

         if ($request->file('image_post_adps')) {
             Storage::disk('public')->delete('/post/adopsi/'.$delete->nama_post_adopsi.'-'.$delete->image_post_adps);
       }

 $adopsi = Adopsi::find($id)->update($adopsiAttr);

【讨论】:

  • 谢谢你,它的工作,所以我必须在删除之前先获取数据,然后我把我的代码更新放在最后?
  • 很高兴它帮助了你
  • 谢谢您,先生,我希望上帝永远保佑您,祝您有美好的一天! :)
猜你喜欢
  • 1970-01-01
  • 2020-03-21
  • 2014-12-22
  • 2021-07-19
  • 2016-11-25
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多