Laravel 5文件删除错误

时间:2015-09-06 07:09:03

标签: php mysql file laravel-5 delete-file

我的laravel 5网络应用程序存在与文件删除有关的问题。

我想从我的表中删除带有相应图像文件的条目。 这是我的表结构。

 Schema::create('master_brands',function($table){
        $table->increments('pk_brand_id');
        $table->string('brand_name');
        $table->string('brand_logo');
        $table->timestamps();
    });

我在数据库中添加了3个品牌,并将图像路径存储在 brand_logo 字段中,如:( / uploads / masters / logocatagory_Computers& IT.png )。

从数据库中删除记录时,我也想从uploads文件夹中删除图像文件。 但是当我执行删除操作时,文件没有删除。 这是我的删除控制器。

  public function branddelete($id)
  {
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  url()."/app".$filename[0]->brand_logo;
    File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png
  }

该文件存在于我的目录中,该目录具有777权限。 !!

我还尝试了存储类来删除文件。但是没有办法!!! ..

我该如何解决这个问题?任何想法...... :(

4 个答案:

答案 0 :(得分:7)

你这样做是错误的。您无法从URL中删除文件,您必须提供文件PATH而不是URL

已编辑

假设您要删除的文件位于public/uploads/masters/logocatagory_Computers,您可以执行此操作:

public function branddelete($id)
{
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get();
    $filname =  $filename[0]->brand_logo; 
    //example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder
    $file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}");

    if(File::exists($file_path)) File::delete($file_path); 
}

答案 1 :(得分:3)

如果您有文件out Storage / app /,Storage ::不起作用,请更改/Config/Filesystems.php尝试将您的' local'在base_path()和注释默认storage_path(),

    'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => base_path(),
        // 'root'   => storage_path('app'),
    ],

然后在Controller

use Illuminate\Support\Facades\Storage;

然后在公共功能中使用存储模型

$path= 'uploads/masters/';
Storage::delete($path . $filname);

答案 2 :(得分:0)

在Laravel 5.1中。使用本地驱动程序时,请注意所有文件操作都与配置文件中定义的根目录相关。默认情况下,此值设置为存储/应用目录。因此,

以下方法会将文件存储在storage / app / file.txt中:

Storage::put('file.txt', 'Contents');

这会删除storage / app中的file.txt

Storage::delete('file.txt');

如果您想更改根目录,请以“ storage / app / uploads / ”为例,您可以将filesystem.php设置如下:

'disks' => [

    'local' => [
        'driver' => 'local',
        'root'   => storage_path('app/uploads/'),
    ],
    ...

然后以下方法将文件存储在storage / app / uploads / file.txt中:

Storage::put('file.txt', 'Contents');

这将删除storage / app / uploads目录中的file.txt。

Storage::delete('file.txt');

答案 3 :(得分:0)

今天花了我很长时间才弄明白的东西:

如果您尝试删除包含在Laravel自己的Collection包装器中的文件列表,您可能需要调用->all()来获取基础数组实例:

// The following is an example scenario
$files = Storage::list('downloads');

$collection = collect($files)->filter(function ($file) {
  return str_contains($file, 'temp');
});

Storage::delete($collection->all()); // Note the "all()" call here