2017-11-22 3 views
0

ich zur Zeit auf einem Laravel 5.5 Projekt arbeiten, wo ich zu Upload-Dateien will , und dann, ich will ihren url der Datei zurück (I muss es Client-Seite verwenden).Laravel, immer url Datei hochgeladen

jetzt sieht mein Code wie folgt aus:

public function pdfUploader(Request $request) 
{ 
    Log::debug('pdfUploader is called. ' . $request); 
    if ($request->hasFile('file') && $request->file('file')->isValid()) { 
    $extension = $request->file->extension(); 
    $fileName = 'tmp' . round(microtime(true) * 1000) . '.' . $extension; 
    $path = $request->file->storeAs('temp', $fileName); 
    return ['status' => 'OK', 'path' => URL::asset($path)]; 
    } 
    return ['status' => 'NOT_SAVED']; 
} 

Es funktioniert gut, ich bekam den OK-Status zurück, und den Weg, aber wenn ich den Pfad verwenden möchten, Ich habe HTTP 404 . Ich überprüfte, die Datei wird hochgeladen.

Mein Gedanke ist, ich sollte die neue URL in den Routen registrieren. Wenn ich muss, wie kann ich es dynamisch machen, und wenn es nicht notwendig ist, was ist falsch mit meiner Funktion?

Thx die Antworten im Voraus.

+1

stellen Sie sicher, dass Sie irgendwo in der Öffentlichkeit speichern, wenn Sie als Asset verwenden möchten. Ich habe einen Importordner, den ich dafür benutze. $ datei-> move (base_path(). '/ public/import /', 'uploadedfile'); – GoatHater

+0

Wie sieht der Pfad aus? Ich denke, du hast es wahrscheinlich irgendwo hochgeladen, das nicht korrekt verfügbar ist. – Ohgodwhy

+0

Die Antwort unten zeigt mir das Problem, ich habe die Dateien auf den Speicher/app/temp hochgeladen und ich musste es in die öffentliche App verschieben. :) – LakiGeri

Antwort

1

standardmäßig Laravel Speicher sind alle hochgeladenen Dateien im Speicherverzeichnis, wenn Sie zum Beispiel $request->file->storeAs('temp', 'file.txt'); Laravel nennen temp Ordner in storage/app/ erstellen und Dateien setzen dort:

$request->file->storeAs('temp', 'file.txt'); => storage/app/temp/file.txt 
$request->file->storeAs('public', 'file.txt'); => storage/app/public/file.txt 

Wenn Sie jedoch Ihre uploaded machen wollen Dateien zugänglich aus dem Internet, gibt es 2 Möglichkeiten, das zu tun:

Ihre hochgeladene Datei in das öffentliche Verzeichnis verschieben

$request->file->move(public_path('temp'), $fileName); // => public/temp/file.txt 
URL::asset('temp/'.$fileName); // http://example.com/temp/file.txt 

HINWEIS: Stellen Sie sicher, dass Ihre Web-Server-Berechtigungen an das öffentliche Verzeichnis

einen symbolischen Link von Speicherverzeichnis

php artisan storage:link 

zu öffentlichen Verzeichnis Dieser Befehl a wird erstellen erstellen schreiben hat symbolische Verbindung von public/storage zu storage/app/public, in diesem Fall können wir unsere Dateien in storage/app/public speichern und sie aus dem Web über Symlinks zugänglich machen:

$request->file->storeAs('public', $fileName); // => storage/app/public/file.txt 
URL::asset('storage/'.$fileName); // => http://example.com/stoage/file.txt 
+0

Ohh danke für die lange Antwort. Ich könnte es tun, mit deinem Guide! Ich musste auf den öffentlichen Weg gehen, und nach dem dann eine symbolische Verbindung hergestellt wurde, und es funktioniert. Danke nochmal! – LakiGeri

Verwandte Themen