2015-09-06 6 views
5

Es gibt ein Problem im Zusammenhang mit meiner Laravel 5 Web-Anwendung bezüglich der Dateilöschung.Laravel 5 Datei Fehler löschen

Ich möchte einen Eintrag aus meiner Tabelle mit der entsprechenden Bilddatei löschen. Hier ist meine Tabellenstruktur.

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

I 3 hinzugefügt Marken db und Speichern von Bildpfad in brand_logo Feld wie: (/uploads/Master/logocatagory_Computers & IT.png).

Beim Löschen des Datensatzes aus der Datenbank möchte ich auch die Bilddatei aus dem Upload-Ordner löschen. Aber die Datei löschte nicht, wenn ich eine Löschaktion ausführe. Hier ist mein Lösch-Controller.

Die Datei existiert in meinem Verzeichnis und dem Verzeichnis mit 777 Berechtigungen. !!

Ich habe auch versucht die Lagerung Klasse file.But gibt es keine Möglichkeit !!! ..

Wie kann ich lösen dieses Problem zu löschen? Irgendwelche Ideen ... :(

Antwort

6

Sie tun es der falsche Weg. Sie können nicht möglicherweise eine Datei von URL löschen, müssen Sie Dateipfad nicht URL

Herausgegeben

Angenommen, die Datei, die Sie zur Verfügung stellen löschen möchten, in public/uploads/masters/logocatagory_Computers befindet könnten Sie dies tun:

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

meine Uploads Ordner in App-Verzeichnis .. –

+0

Ich habe meine Antwort bearbeitet. Ersetzen Sie einfach public_path durch app_path – Digitlimit

+0

danke dude. Genial. –

3

Wenn Sie die Datei aus Storage/app /, Lagerung :: nicht funktioniert haben, die /Config/Filesystems.php versuchen, Ihre ‚lokale setzen ändern 'at base_path() und comment default storage_path(),

'disks' => [ 

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

Dann in Controller-

use Illuminate\Support\Facades\Storage; 

dann in der Öffentlichkeit funtion Verwendung Speichermodell

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

In Laravel 5.1. Beachten Sie bei der Verwendung des lokalen Treibers, dass alle Dateioperationen relativ zum Stammverzeichnis sind, das in Ihrer Konfigurationsdatei definiert ist. Standardmäßig ist dieser Wert auf das Verzeichnis storage/app festgelegt. Daher würde speichern

das folgende Verfahren eine Datei im Speicher/app/file.txt:

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

diese datei.txt im Speicher löschen würde/app

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

Wenn Sie möchten, Ändern Sie das Stammverzeichnis, nehmen Sie 'Speicher/app/uploads/' zum Beispiel, könnten Sie das Dateisystem einstellen.php, wie folgend:

'disks' => [ 

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

dann würde dies folgende Methode eine Datei im Speicher speichern/app/uploads/file.txt:

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

diese datei.txt in storage/app/Upload-Verzeichnis löschen würde .

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

Etwas, das mir dauerte eine ganze Zeit heute, um herauszufinden:

Falls Sie versuchen, eine Liste von Dateien zu löschen, die in Laravel eigenen Sammlung Umhüllung eingehüllt sind, müssen Sie möglicherweise ->all() anrufen Um die zugrundeliegende Array-Instanz zu erhalten: