2016-11-08 4 views
1

Ich habe eine $data Variable mit einem base64: Es ist entweder ein Bild oder eine Datei.Laravel Base64-Datei in einen Ordner verschieben

Ich möchte diese Datei in einen Ordner verschieben ... aber es ist als leere Datei verschoben.


Mein Code:

$file_name = Input::get('file_name'); 

$image = base64_decode($data); 

file_put_contents(public_path('/user_attachments/').$file_name, $image); 


Bitte jemand helfen?

+0

Im Ordner user_attachments erstellt es nur leere Bilder oder Dokumente. – SARAN

+0

Meine $ Daten sind Base64-Datei. $ data = Daten: image/png; base64, iVBORw0KGgoAAAA ............ kSuQmCC – SARAN

+0

Das Problem ist, dass 'Daten: image/png; base64'. Dies verwandelt die '$ Daten' in ungültige Bilddaten. Versuchen Sie es mit dem 'data: URI-Schema' (' data: image/png; base64, ') – tomloprod

Antwort

2

Sie nicht gehören die data:URI scheme (data:image/png;base64,) innerhalb $data.

Sie können die data:URI scheme mithilfe der Funktion explode entfernen, die ein Array mit zwei Elementen und vor der Verwendung base64_decode zurückgibt.

  • $data[0] => die Daten: URI-Schema.
  • $data[1] => Ihre Daten.

es wie folgt verwenden, , als Trennzeichen verwendet:

$data = explode(',', $data)[1]; 


Und dann den nächsten Code Versuchen:

$fileName = Input::get('file_name'); 
$fileStream = fopen(public_path() . '/user_attachments/' . $fileName , "wb"); 

fwrite($fileStream, base64_decode($data)); 
fclose($fileStream); 

oder

//////////// The final filename. 
$fileName= Input::get('file_name'); 

//////////// Upload path 
$uploadPath = public_path() . "/user_attachments/" . $fileName; 

//////////// Decode your image/file 
$data = base64_decode($data); 

//////////// Upload the decoded file/image 
if(file_put_contents($uploadPath , $data)){ 
    echo "Success!"; 
}else{ 
    echo "Unable to save the file."; 
} 
+0

Diese Datei wird auch im Ordner erstellt. aber es war leer. – SARAN

+0

Ihr Fehler liegt sicher in Ihrer $ data-Zuweisung.Zeigen Sie diesen Code. – tomloprod

+0

Meine $ Daten sind Base64-Datei. $ data = Daten: image/png; base64, iVBORw0KGgoAAAA ........... kSuQmCC – SARAN

0

Um den "Laravel Weg" zu machen, sollten Sie den eingebauten Storage/Fly System Treiber verwenden.

Erstellen Sie eine "Platte" in der config/filesystems.php Platten-Array, so etwas wie dieses

'user_attachments' => [ 
    'driver' => 'local', 
    'root' => public_path('user_attachments') 
]; 

Dann können Sie die Datei thorugh der Speicher Fassade speichern wie diese

Storage::disk('user_attachments')->put('filename.txt', $contents);

Es gibt andere Möglichkeiten, um dies auch zu erreichen, aber dies sollte funktionieren

Lesen Sie hier mehr https://laravel.com/docs/5.3/filesystem

Verwandte Themen