【问题标题】:How to Delete Images from a folder in Public after update of the image in Laravel 8在 Laravel 8 中更新图像后如何从公共文件夹中删除图像
【发布时间】:2022-01-15 18:03:21
【问题描述】:

我尝试更新包含文件(图像)的表单并删除旧图像。更新工作正常,但旧图像无法删除。我试过这段代码,但图像没有被删除。请帮我。提前致谢。

public function update(Request $request, $id)
{
    $slug   = SlugService::createSlug(Category::class, 'slug', $request->title);
    $request->validate([
        'title'=>'required',
        'category_image'=>'image'
    ]);
    if ($request->hasFile('category_image')) {
        $image          = $request->file('category_image');
        $newImageName   = uniqid().'-'.$request->title.'.'.$image->getClientOriginalExtension();
        $location       = public_path('/categoryImage');
        $OldImage       = public_path('categoryImage/'.$request->category_image);
        $image->move($location, $newImageName);
        Storage::delete($OldImage);
    }else {
        $newImageName   = $request->category_image;
    }
    Category::where('id', $id)->update([
       'slug'=>$slug,
       'title'=>$request->input('title'),
       'details'=>$request->input('details'),
       'category_image'=>$newImageName
    ]);
    return redirect('category')->with('success', 'Category Successfully Updated');
}

【问题讨论】:

  • 当我在 if 语句中使用 dd('$request->category_image') 时不会产生图像的名称,而在 else 语句中使用时会显示图像名称。我无法弄清楚我做错了什么。

标签: php sql laravel image slug


【解决方案1】:

您可以像这样删除旧图像,如果图像不在存储的根目录中,请在图像名称之前插入您的文件位置。

unlink(storage_path('/location_inside_storage/'.$OldImage));

【讨论】:

  • 谢谢,但没用。当我在 if 语句中使用 dd('$request->category_image') 时,不会产生图像的名称,而在 else 语句中使用时会显示图像名称。我无法弄清楚我做错了什么。
【解决方案2】:
public function update(Request $request, $id)
{
    ...

    $category = Category::find($id); #new

    if ($request->hasFile('category_image')) {
        $image          = $request->file('category_image');
        $newImageName   = uniqid().'-'.$request->title.'.'.$image->getClientOriginalExtension();
        $location       = public_path('/categoryImage');
        $OldImage       = public_path('categoryImage/'.$category->category_image); #new
        $image->move($location, $newImageName);
        unlink($OldImage); #new
    }else {
        $newImageName   = $request->category_image;
    }

    #you can simplify this as
    $category->slug = $slug;
    $category->title = $request->title;
    $category->details = $request->details;
    $category->category_image = $newImageName;
    $category->save()
    
    return redirect('category')->with('success', 'Category Successfully Updated');
}

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2017-02-03
  • 2019-09-05
  • 1970-01-01
  • 2014-03-24
  • 2019-11-26
  • 2019-06-26
相关资源
最近更新 更多