2015-09-06 88 views
5

有一個與我的laravel 5 web應用程序有關的文件刪除相關的問題。Laravel 5文件刪除錯誤

我想從我的表中刪除一個條目與相應的圖像文件。 這是我的表結構。

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

我加入3-品牌db和存儲圖象路徑中brand_logo場像:(/上傳/主人/ 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權限的目錄中。 !

我也試過存儲類刪除file.But有我怎樣才能解決這個問題沒辦法!!!

?任何想法... :(

回答

6

你是做了錯誤的方式,你不可能刪除網址的文件時,你必須提供文件路徑不是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); 
} 
+0

我上傳的應用程序目錄中的文件夾.. –

+0

我編輯了我的答案。簡單地用app_path替換public_path – Digitlimit

+0

感謝兄弟。真棒。 –

3

如果你有文件了存儲/程序/倉儲::不工作,改變/Config/Filesystems.php嘗試把你的本地'在base_path()和註釋默認storage_path(),

'disks' => [ 

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

然後,在控制器

use Illuminate\Support\Facades\Storage; 

然後,在公共funtion使用存儲模型

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

在Laravel 5.1。使用本地驅動程序時,請注意,所有文件操作都與您的配置文件中定義的根目錄有關。默認情況下,此值設置爲storage/app目錄。因此,

下面的方法將存儲在存儲/應用/ file.txt的文件:

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

這將刪除存儲file.txt的/應用

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

如果你想更改根目錄,以'storage/app/uploads/'爲例,您可以設置文件系統。PHP如下:

'disks' => [ 

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

那麼這下面的方法將文件存儲在存儲/程序/上傳/ file.txt的:

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

這將刪除存儲/程序/上傳目錄file.txt的。

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

東西花了我不少時間來弄清楚今天:

在你試圖刪除被包裹在Laravel自己收集包裝的文件列表的情況下,你可能需要調用->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