2017-02-13 4 views
0

Ich erstelle eine kleine institutionelle Website für meine Firma, und es wird einen Blog geben (kann nur aus dem Backoffice posten, nur für Admins). Ich habe grundsätzlich Probleme mit dem Bildupload. Ich muss den Bildlink in der Datenbank speichern, aber ich weiß nicht, wie ich das hochgeladene Bild in meinen Ressourcenordner verschieben soll.Laravel 5 Zweifel über Bild-/Datei-Upload

Dies ist das erste Mal, dass ich mit dem Hochladen von Dateien in Laravel arbeite, und die Dokumentation ist etwas verwirrend mit dem lokalen Speicher und Cloud Storage. Ich bin nicht wirklich sicher, welche ich verwenden müssen ...

ich dies nur in meiner Vorlage haben:

<label for="image" class="col-md-4 control-label">Upload image</label> 
<div class="col-md-6"> 
    <input id="image" type="file" name="image" required> 
</div> 

Ich habe keine Ahnung, wie diese in der Steuerung zu verarbeiten ..

EDIT:

Also, nachdem ich mehr durchlesen die Dokumente, glaube ich, ich habe verstanden. Hier ist, was ich bisher habe:

if ($request->hasFile('image') && $request->file('image')->isValid()) { 
    $path = $request->photo->store('image'); 
} 

Aber jetzt bin ich diesen Fehler: Call to a member function store() on null

Ich bin mit dem public Laufwerk, da jeder der Blog-Posts sehen. Irgendeine Hilfe?

+1

Es ist gut dokumentiert: https://laravel.com/docs/5.4/requests#files – halloei

+0

Dank. Ich habe meiner Frage ein EDIT hinzugefügt. Bitte prüfen Sie, ob dies möglich ist. –

+1

Was bedeutet 'dd ($ request-> photo);' return? – Luke

Antwort

2

Versuchen Sie folgendes:

$path = $request->image->store('images'); 
+0

Ja, ich habe es bereits repariert, aber vergessen, die Antwort hier zu posten. Vielen Dank! –

1

Sie können lokalen Speicher verwenden, der Cloud-Speicher wird beispielsweise in einem Amazon S3-Bucket gespeichert.

In Ihrem Controller können Sie überprüfen und Dateien

if (Input::file('image')) 
{ 
    // file is set. 
    // Move the file. 
    Input::file('image')->move($destinationPath, $fileName); 
} 
+0

Ich bin verwirrt. In diesem Link: laravel.com/docs/5.4/requests#files Es heißt, die Speichermethode direkt aus dem Objekt '$ request' zu verwenden. Und Sie sagen, dass Sie den Facade (?) Input verwenden. Welchen soll ich benutzen? –

+0

Ich denke, es ist nur Vorliebe. Ich habe mich für die Verwendung der Eingabefassaden in meinem Code in der Vergangenheit entschieden, aber sie sind nur eine hilfreiche (weniger tragbare) Art, Dinge zu tun. Ich denke, das kommt von einem L4-Hintergrund, wo Fassaden stärker dokumentiert wurden. – Luke

+0

Ich habe eine EDIT zu meiner Frage hinzugefügt. Bitte prüfen Sie, ob dies möglich ist. –

0

storing-uploaded-files

Speichern Uploads

eine hochgeladene Datei speichern unter Verwendung abrufen, werden Sie verwenden in der Regel eine Ihrer konfigurierten Dateisysteme. Die UploadedFile-Klasse verfügt über eine Speichermethode, mit der eine hochgeladene Datei auf einen Ihrer Datenträger verschoben wird. Dies kann ein Speicherort in Ihrem lokalen Dateisystem oder sogar ein Cloudspeicherort wie Amazon S3 sein.

Die Speichermethode akzeptiert den Pfad, in dem die Datei relativ zum konfigurierten Stammverzeichnis des Dateisystems gespeichert werden sollte. Dieser Pfad sollte keinen Dateinamen enthalten, da automatisch eine eindeutige ID generiert wird, die als Dateiname dient.

Die Speichermethode akzeptiert auch ein optionales zweites Argument für den Namen des Datenträgers, der zum Speichern der Datei verwendet werden soll. Das Verfahren wird den Pfad der Datei relativ zum Stamm der Platte zurück:

$path = $request->photo->store('images'); 

$path = $request->photo->store('images', 's3'); 

Wenn Sie automatisch erzeugt nicht einen Dateinamen werden möchten, können Sie die storeAs Methode verwenden kann, die den Pfad, Dateinamen akzeptiert, und Plattennamen als Argumente:

$path = $request->photo->storeAs('images', 'filename.jpg'); 

$path = $request->photo->storeAs('images', 'filename.jpg', 's3');