如何从laravel 5中的公共/图像文件夹中删除图像(URL数据)

时间:2017-06-22 23:36:29

标签: php laravel laravel-5

如何从laravel 5中的public / images文件夹中删除图像文件?

我在这个网站上找到了一些例子,但我知道他们只是在record table中使用了文件名,但是我使用的是URL,例如localhost/project/uploads/filename.jpg我的record table。所以,如果我这样做:

    $image_path = $data->image;  // the value is : localhost/project/image/filename.format
    if(File::exists($image_path)) {
        File::delete($image_path);
    }

文件未被删除

帮助,谢谢

8 个答案:

答案 0 :(得分:12)

如果要从服务器中删除图像,则必须引用目录服务器中的文件位置,这意味着您无法通过URL链接引用它来删除它。

通常,Laravel 5文件位于 public 文件夹中。

示例:您的文件位于 public / images

$image_path = "/images/filename.ext";  // Value is not URL but directory file path
if(File::exists($image_path)) {
    File::delete($image_path);
}

如果我可以通过参考网址从服务器删除图片,那么Google是第一个目标:)

答案 1 :(得分:2)

这是我删除图像的操作:

public function SliderDelete(String $slider_id)
{
    $slider             = Slider::findOrFail($slider_id);
    $image_path         = public_path("\storage\images\sliders\\") .$slider->photo;

    if(File::exists($image_path)) {
        File::delete($image_path);
    }
    else{
        $slider->delete();
        //abort(404);
    }

    $slider->delete();

    return response()->json(['success'=>'Slider deleted successfully!']);
}

答案 2 :(得分:1)

您可以使用普通的PHP删除文件关键字(@unlink)

$image_path = "the name of your image path here/".$request->Image; 

 if (file_exists($image_path)) {

       @unlink($image_path);

   }

答案 3 :(得分:1)

 $filename = public_path($fileloc);

            if(File::exists($filename)) {
                File::delete($filename);
            }

答案 4 :(得分:1)

在 Laravel 8 中,你喜欢这样做

// import Storage class
use Illuminate\Support\Facades\Storage;

Storage::disk('public')->delete('path-of-file');

你可以使用你喜欢的磁盘

Storage::disk('s3')->delete('path-of-file');

答案 5 :(得分:0)

调用此函数并传递两个参数 $ filepath =文件存在的路径 $ filename =文件名称

public static function UnlinkImage($filepath,$fileName)
{
    $old_image = $filepath.$fileName;
    if (file_exists($old_image)) {
       @unlink($old_image);
    }
}

答案 6 :(得分:0)

我今天遇到了同样的问题 但现在文件已通过此代码删除

 $image_path = $data->image;  
    if(file_exists($image_path)) {
        File::delete($image_path);
    }

从根本上说,对我来说,难题是如果条件没有返回,那是真的。并且该语句没有执行。

btw我将文件存储在laravel中的公共文件夹中

希望这对某人有帮助。

答案 7 :(得分:0)

public function destroy($id)
    {   

        $imagePath = YourModelName::select('image')->where('id', $id)->first();

         $filePath = $imagePath->image;

                   if (file_exists($filePath)) {

                   unlink($filePath);

           YourModelName::where('id', $id)->delete();

        }else{

         YourModelName::where('id', $id)->delete();
        }


    }