2017-09-22 4 views
2

Ich bin neu in Laravel. Ich habe versucht, einige Dateien aus dem öffentlichen Ordner meines Projekts zu löschen. Definierte 'löschen' Funktion alsLaravel. unlink ('Dateipfad'): Berechtigung verweigert

public function delete($id) 
{ 
    $files = File::find($id); 
    $filedelete = $files['name']; 
    Storage::delete('public/upload/',$filedelete); 
    $files->delete(); 
    return back(); 
} 

folgen, wenn ich löschen drücken Eingabe meiner Ansicht

<a href="{{ action('[email protected]',$link['id']) }}" class="btn btn warning"> 
    <button id="elimina" class="btn btn-danger" type="submit">Elimina</button> 
</a> 

mit dieser Strecke in web.php

Route::get('/showFile/{id}/delete',['as'=>'delete', 'uses'=>'[email protected]']); 

es gibt mir diese Fehlermeldung

unlink(C:\wamp64\www\laravel\[nameproject]\storage\app\public/upload): Permission denied 

(Probieren) zu sein so klar wie möglich, lade ich eine Datei in einer Datenbank und in diesem Ordner hoch. $ id ist der Primärschlüssel der Tabelle, in der sich die Referenz dieser Datei befindet. Ich denke, mein Problem ist mit $ files ['name'], denn wenn ich den genauen Namen der Datei schreibe, funktioniert es. Aber ich muss das Löschen dynamisch machen. Ich hoffe klar zu sein, es tut mir leid, wenn nicht.

Vielen Dank im Voraus. Alles Gute.

PS Mit dieser Linie in Funktion löschen, es funktioniert

Storage::delete('public/upload/[filename]'); 

bearbeiten

$files = File::find($id); 
$filedelete = $files['name']; 
return "".$filedelete; 

es gibt mir den richtigen Namen der Datei. Also, mein Problem ist nur, wie man es aus diesem Ordner löscht?

+0

Ist Ihr Laufwerk C geschützt durch UAC oder es ist nur Admin-Zugang? –

+0

Kein Schutz, nur Administratorzugriff. Ich kann Dateien hinzufügen und bearbeiten, nur nicht löschen, wenn ich den Namen der Datei nicht manuell eingeben –

+0

Wenn Sie denken, das Problem mit dem Namen ist, geben Sie den Namen vor dem Löschen und sehen, ob es wie Sie erwarten. Wenn Sie eine Datei auf die Festplatte schreiben, gehört sie nicht unbedingt demselben Benutzer wie die php delete-Funktion. –

Antwort

0

Sie sagten, Sie den Verweis auf die Datei in der DB gespeichert, so sollte diese Arbeit:

$files = File::find($id); 
Storage::delete('public/upload/'.$files->filePathColumnName); 

das geändert, um eine. in deinem löschen. Würde wahrscheinlich gehen mit:

public_path().'/uploads/'.$files->filePathColumnName 

je nachdem, wie viel von dem Weg, den Sie in der db setzen

+0

Nichts, ich habe mit Ihrem Code geschrieben, aber es löscht die Stimme von db, aber nicht aus dem Speicherordner –

+0

Versuchen Sie dd ('der/Pfad/zu/the/file), so dass Sie sicher sind, dass die Datei existiert und der andere Gedanke ist ein umgekehrter Schrägstrich vor \ Storage :: delete – BobB

+0

Schließlich funktioniert es! Vielen Dank BobB, ich wünsche dir alles Gute :) Danke nochmals –