2016-07-21 3 views
0

Ich habe ein Formular mit einer Datei zu uplaod. Alle Werke finden. Aber ich möchte die Datei nicht direkt in einen Ordner verschieben. Nach schließe ich eine Bestätigungsseite zeigen und dort zeige ich die hochgeladene Datei mitDatei von Temp nach Bestätigung mit PHP/Laravel

header('Content-Type: image/x-png'); 
$file = file_get_contents(\Illuminate\Support\Facades\Input::file('restImg')); 
$imgType = \Illuminate\Support\Facades\Input::file('restImg')->guessClientExtension(); 
echo sprintf('<img src="data:image/png;base64,%s" style="max-height: 200px"/>', base64_encode($file)); 

Dies funktioniert gut. Nach der Bestätigung verschiebe ich die Datei gerne in einen Ordner. Wie kann ich die Datei nach der Bestätigung verschieben? Die Eingabe :: get ('Datei') ist nicht mehr verfügbar.

Antwort

0

Sie müssen die Datei im ursprünglichen Upload vorübergehend an einem anderen Speicherort als dem Standardverzeichnis tmp speichern.

Die Dokumentation für PHP file uploads sagt:

Die Datei wird am Ende der Anforderung aus dem temporären Verzeichnis gelöscht werden, wenn es weg

oder umbenannt nicht bewegt wurden

Das bedeutet, dass sich bewegenden Bei der nächsten Anfrage ist die Datei nicht mehr verfügbar.

Verschieben Sie es stattdessen in Ihr eigenes benutzerdefiniertes temporäres Verzeichnis oder benennen Sie es in etwas Spezielles um, und behalten Sie dann den Dateinamen in $_SESSION, um es bei der nächsten Anfrage zu erhalten.

Für Laravel, bedeutet es sollte im /storage Verzeichnis mit so etwas wie dies setzen:

// Get the uploaded file 
$file = app('request')->file('myfile'); 

// Build the new destination 
$destination = storage_path() . DIRECTORY_SEPARATOR . 'myfolder'; 

// Make a semi-random file name to try to avoid conflicts (you can tweak this) 
$extension = $file->getClientOriginalExtension(); 
$newFilename = md5($file->getClientOriginalName() . microtime()).'.'.$extension; 

// Move the tmp file to new destination 
app('request')->file('myfile')->move($destination, $newFilename); 

// Remember the last uploaded file path at new destination 
app('session')->put('uploaded_file', $destination.DIRECTORY_SEPARATOR.$newFilename); 

Denken Sie daran, nach der zweiten Anforderung, die Datei zu unlink() oder mit ihm etwas anderes tun, oder dass Ordner füllen schnell hoch.

Weitere Referenz: http://api.symfony.com/2.7/Symfony/Component/HttpFoundation/File/UploadedFile.html