2017-06-19 7 views
0

Ich habe ein Problem beim Herunterladen von Dateien in meinem Speicherordner. Ich bekomme keine Fehlermeldungen. Alles, was passiert, ist eine Umleitung auf die 404-Seite. Die Datei existiert in dem angegebenen Pfad, also bin ich ratlos. Ich habe versucht, $ Dokument aus dem zweiten Argument in der Antwort() zu entfernen, hat aber nicht funktioniert. Was muss ich tun? Seltsam wenn es auf einem lokalen Host läuft, funktioniert es?Laravel Datei herunterladen Problem

public function download(Request $request, $document) 
{ 
    $pathToFile = storage_path() . '/' . 'app/documents/client'.'/'.$document; 
    if (file_exists($pathToFile)) 
    {  
     return response()->download($pathToFile, $document); 
    } 
    else 
    { 
     // Error 
     return redirect('errors.404'); 
    } 
} 

File System

'disks' => [ 

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

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

Route:

Route::get('documents/client/{document}',  '[email protected]')->name('client.docs'); 
+0

Loggen Sie Ihre '$ pathToFile' und sehen, ob es wirklich existiert, und was die Berechtigungen sind. – aynber

+0

Überprüfen Sie, ob die Datei am richtigen Ort existiert. –

+0

Die Datei existiert. Wie lautet die Route? Aktualisiert in Frage –

Antwort

0

Dies ist ein Ansatz, um das Herunterladen von Dateien, die sie helfen können.

Das erste Problem ist, dass die href in den Anker-Tags einen Link zu der URL erstellt, aber das Dokument war nicht über eine normale URL zugänglich, weil es in Storage war. Der Code wurde dann an 404 umgeleitet, da er die URL-Ressource nicht finden konnte (Speicher ist nicht öffentlich verfügbar). Der Controller hat die Anforderung nie erhalten, weil href keine Anforderungen an die Controller sendet.

Mit Form-Aktion sendet dies die Anforderung zum Download an die Steuerung, die wiederum das GET von Storage verarbeitet.

<form action="{{ route('client.docs', [$document->document]) }}" method="GET" role="form" id="form" > 
{{ csrf_field() }} 
<input type="hidden" placeholder="{{ $document->document}}" > 
    <button class="btn btn-xs btn-primary" type="submit"> 
    Download<i class="fa fa-arrow-circle-down"></i> 
    </button> 
</form> 
Verwandte Themen