在 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 7.x - 如何从 URL 中删除“公共”?