在 laravel 中更新时如何删除公共/文件夹中的多个图像?

Posted

技术标签:

【中文标题】在 laravel 中更新时如何删除公共/文件夹中的多个图像?【英文标题】:How to delete multiple image in public/folder when updating in laravel? 【发布时间】:2018-11-13 05:34:18 【问题描述】:

我使用数据库中的数组保存多个图像。例如。 img.jpg,img1.jpg,img2.jpg 这是我的代码。

$this->validate($request,[
        'listing_id' => 'required',
        'images.*' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        'description' => 'required',
        'features' => 'required',
        'make' => 'required',
    ]);

    $vehicles = vehicle::find($id);
    $input=$request->all();
    $images=array();
    if($files=$request->File('images'))
        foreach($files as $file)
            $name=date('mdYHis').uniqid().'.'.$file->getClientOriginalExtension();
            $file->move('uploaded-images',$name);
            $images[]=$name;
            $vehicles->images = implode(",",$images);
        
    else

        $vehicles->images = $request->images_dummy;

    

我要的是删除public/uploaded-images中的图片文件。 我找到了这个How to Delete Images from Public/Images Folder in laravel 5 (URL Data),但它在我的代码中不起作用。

【问题讨论】:

因此您存储了一个逗号分隔的图像列表,并且在更新时您想删除逗号分隔列表中的所有图像 - 对吗? 是的先生..我在上传图片时使用这个vehicles->images = implode(",",$images); 【参考方案1】:

当您将图像存储为逗号分隔列表时,您只需分解字符串(生成一个数组)然后循环遍历它以删除图像。

这样的事情应该可以工作:

use Illuminate\Support\Facades\Storage;

$images = explode(",", $vehicles->images);

foreach ($image as $images) 
    Storage::delete("uploaded-images/$image");

如果您更改代码以将图像名称存储为图像的实际路径(即uploaded-images/img.jpg,uploaded-images/img1.jpg,那么您可以将其更改为更简单:

use Illuminate\Support\Facades\Storage;

$images = explode(",", $vehicles->images);
Storage::delete($iamges);

这两个示例都可以在Laravel docs 中找到。

【讨论】:

$img = explode(",", $vehicles->images); Storage::delete($img); if($files=$request->File('images')) foreach($files as $file) $name=('uploaded-images/').date('mdYHis').uniqid().'.'.$file->getClientOriginalExtension(); $file->move('uploaded-images',$name); $images[]=$name; $vehicles->images = implode(",",$images); else $imagess = $request->images_dummy; $vehicles->images = $imagess; 我更新了我的代码,但仍在uploaded-images中添加图像 是的,您的代码仍将图像添加到 upload-images 文件夹。首先,您要删除现有图像,然后添加新图像。这不是你想要的吗? 是的先生已经解决了..我使用use File;而不是存储foreach(explode(',', $vehicles->images) as $img) File::delete('uploaded-images/'.$img); 【参考方案2】:

你应该试试这个:

use File;

$images = explode(",", $vehicles->images);

foreach($images as $image)

   $image_path = public_path().'/images/'.$image;

   if(File::exists($image_path)) 
    File::delete($image_path);
   

【讨论】:

以上是关于在 laravel 中更新时如何删除公共/文件夹中的多个图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中删除公共文件夹

Laravel 7.x - 如何从 URL 中删除“公共”?

从 URL Laravel 5.3 中删除公共

在 laravel 中更新时使用 newone 删除以前的文件

Laravel 4 从 URL 中删除公共

从 url laravel 5.4 中删除公共