2017-08-28 3 views
1

In Laravel gefunden 5.3 I einrichten möge ein öffentlich zugängliches Upload-Verzeichnis so das ich habe in der filesystems.php Konfigurationsdatei:Laravel 5.3-Datei nicht in der Produktion

'disks' => [ 

    ... 

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

    ... 

In der store Funktion in FileController.php, ich benutze diese die Datei zu erstellen:

 // Send file to "uploads" drive, under "announcements" folder. 
     $path = $file->store('announcements', 'uploads'); 

     // Create file in DB 
     $originalName = $file->getClientOriginalName(); 

     $uploadedFile = File::create([ 
      'name' => $originalName, 
      'path' => $path, 
     ]); 

Und diese Funktion eine Datei zum Download:

public function publicDownload(Request $request) 
{ 
    $file = File::where('path', $request->p)->firstOrFail(); 

    return response()->download('uploads/'.$request->p, $file->name); 
} 

Dies funktioniert in der Entwicklungsumgebung (Homestead), funktioniert aber nicht in der Produktionsumgebung (Shared Host). Was ist mit dem Code oder Setup falsch?

Laravel.log sagt:

[2017-08-28 10:46:41] production.ERROR: exception 'Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException' with message 'The file "uploads/announcements/ee00ed45f3354894205c2ae47bb5b30a.pdf" does not exist' in /home3/xxx/app/vendor/symfony/http-foundation/File/File.php:37 
+0

Haben Sie eine solche Verzeichnisstruktur in Ihrem Produktionsserver überprüft? –

+0

@SagarGautam Danke für die Nachfrage - ja, ich habe überprüft und die Dateien werden mit der gleichen Struktur hochgeladen. Seltsam ist, wenn ich den Dateipfad im Browser eintippe, heißt es immer noch "Datei nicht gefunden". In der Entwicklung kann ich die Datei erhalten, indem ich den Pfad direkt zum Browser gebe. –

+0

Während das Projekt auf dem Server aktualisiert wird, werden manchmal leere Verzeichnisse nicht berücksichtigt und nicht hochgeladen. In diesem Fall müssen Sie in der Produktion Ordner anlegen. Bitte überprüfen Sie es in Ihrem Server, wenn 'uploads/...' existiert. –

Antwort

1

Ich habe gerade bemerkt, haben Sie Probleme mit der Wurzel in folgende Zeile haben,

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

Sie root definiert haben bis zu ..../public/uploads/ so Ihre volle Pfad der Datei startet von der ..../public/uploads/ und suchen Sie nach Datei im Verzeichnis ..../public/uploads/upload/, die nicht beendet wird.

So Ihre Wurzel zu öffentlichen Weg nur ändern, wie,

'root' => public_path(), 

Eine andere Sache,

In herunterladen, werden Sie nicht Lagerung Fassade mit, so dass Sie wie vollständigen Pfad zur Verfügung stellen müssen,

return response()->download(public_path().'/uploads/'.$request->p, $file->name); 

Ich hoffe, Sie verstehen.

Verwandte Themen