【问题标题】:Error showing when Delete image in laravel在laravel中删除图像时显示错误
【发布时间】:2020-11-16 02:57:52
【问题描述】:

我想删除存储在服务器中的图片,

我存储这样的图像

 $image1 = $postData['img']['0']->store('public');
 $Add->Img1 = str_replace('public/', '', $image1 );

图片保存在 public/storage 文件夹

我显示这样的图像

<img src="{{ asset('/storage/'.$add->Img1)}}">

所以我需要使用这样的标签删除这张图片

<a href="{{route('deleteImg',[app()->getLocale(),'id'=>$add->Img1]) }}" class="btn">Remove</a>

这是我的路线

Route::get('/deleteImg/{id}', 'AlladdsController@DeleteImg')->name('deleteImg'); 

这是我删除图像的控制器

public function DeleteImg (Request $request, alladds $alladds)
{
   $img= request('id');

   if(Storage::delete('/public'.'/'.$img)) {
         return   'file is deleted';
     }
     else {
        return   'file is not deleted';
        }
  return redirect()->back();
}

但是这段代码不起作用,我想做什么来更正这段代码

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您的路由将 id 注入方法 DeleteImg(),但您有一个不同的字段捕获注入的 id。

    这个路由:

    Route::get('/deleteImg/{id}', 'AlladdsController@DeleteImg')->name('deleteImg');  
    

    将id作为$request之后的参数推入方法中。

    不知道alladds是什么,好像也没有用过,所以建议按照Laravel的约定,把方法输入改写成这样:

    // Note lower case to match route method and std.
    public function deleteImg (Request $request, $img){ ... }
    

    这会将您发送到路由中的任何内容直接注入方法中。这将修复不匹配错误(如果这甚至是一个错误 - 不确定,因为您没有说出确切的问题是什么)。

    另外 - 请注意,您正在从 storage 目录调用资产,然后尝试从 public 删除图像 - 这是两个不同的地方,很可能是错误的原因 - 也许其中一个位置是不正确,因此您试图从不存在的区域中删除(或调用)。

    【讨论】:

    • AlladdsController@DeleteImg 收到图片名称,但删除功能不起作用,我认为可能是图片路径问题,
    • 是的——我想是的。请参阅我答案的最后一部分-您将从存储转到公共-其中一个是正确答案。为两者设置正确的路径,我认为这可以解决它。
    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2016-07-03
    相关资源
    最近更新 更多