Laravel: Speichern Base64 .png-Datei für öffentliche Ordner von der Steuerung
Sende ich ein png-Bild-Datei auf den controller in base64 via Ajax. Ich habe bereits testen und sicherstellen, dass controller erhalten hat id aber immer noch nicht speichern Sie es auf öffentlichen Ordner.
Hier ist mein controller
public function postTest() {
$data = Input::all();
//get the base-64 from data
$base64_str = substr($data->base64_image, strpos($data->base64_image, ",")+1);
//decode base64 string
$image = base64_decode($base64_str);
$png_url = "product-".time().".png";
$path = public_path('img/designs/' . $png_url);
Image::make($image->getRealPath())->save($path);
//I've tried using
//$result = file_put_contents($path, $image);
//too but still not working
$response = array(
'status' => 'success',
);
return Response::json( $response );
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Intervention Bild bekommt binäre Daten mit file_get_content Funktion:
Referenz : http://image.intervention.io/api/make
Dem controller sollte so Aussehen:
Dies ist eine einfache Fehler.
Sind Sie mit public_path falsch. Es sollte sein:
Außerdem würde ich es vermeiden, dass Ihre Methode zum senden des Bildes. Blick auf eine ordnungsgemäße upload in einem Formular, und verwenden Sie Laravel Input::file-Methode.
$path = "/img/designs/" . $png_url
ist genug.Meine Lösung ist:
Eigentlich
Input::all()
gibt einarray
Eingänge, so haben Sie folgende:Nun Ihre
$data
ist ein array ein Objekt nicht, so dass Sie versuchen, Zugriff auf das Bild als ein Objekt wie:So, es funktioniert nicht. Sie sollten versuchen Sie es mit:
Da es (
base64_image
) erreichbar von$_POST
dannInput::file('base64_image')
wird nicht funktionieren, weilInput::file('base64_image')
prüft die$_FILES
array und es gibt ' s nicht in Ihrem Fall.$result = file_put_contents($path, $image);
Jetzt png-Bild erstellt wird. Aber die Datei ist nicht lesbar. Ist$data['base64_image']
bereits eine speicherbare Datei?$base64_str
?mache ich was ist mit basic Weg
I ' V getan!!
Habe ich ersetzt
$data->base64_image
zu$_POST['base64_image']
und verwenden Sie dann$result = file_put_contents($path, $image);
statt
Image::make($image->getRealPath())->save($path);
Aber das sieht nicht aus wie ein laravel Möglichkeiten. Ich haben Sie eine andere Weise, die mehr elegant Aussehen, erzählen Sie mir bitte!
$data->base64_image
sollte es$data['base64_image']
statt, überprüfen Sie meine Antwort.