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
Haben Sie eine solche Verzeichnisstruktur in Ihrem Produktionsserver überprüft? –
@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. –
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. –