Laravel: Enregistrer Au Format Base64 .png fichier de dossiers publics à partir du contrôleur.
- Je envoyer un fichier image (png) au contrôleur en base64 via Ajax. J'ai déjà tester et assurez-vous que le contrôleur a reçu id, mais ne peut toujours pas l'enregistrer pour le dossier public.
Voici mon contrôleur
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 );
}
Vous devez vous connecter pour publier un commentaire.
Intervention de l'Image devient de données binaires à l'aide de file_get_content fonction:
Référence : http://image.intervention.io/api/make
Votre contrôleur devrait ressembler à ceci:
C'est une erreur facile.
Vous utilisez public_path de manière incorrecte. Il doit être:
Aussi, je voudrais éviter de votre méthode d'envoi de l'image. Regarder un bon télécharger un formulaire et l'utilisation Laravel de l'Entrée::méthode de fichiers.
$path = "/img/designs/" . $png_url
est assez.Ma solution est la suivante:
En fait,
Input::all()
retourne unarray
des intrants vous avez donc le suivant:Maintenant votre
$data
est un tableau n'est pas un objet de sorte que vous tentez d'accéder à l'image comme un objet, comme:Donc, ça ne fonctionne pas. Vous devez essayer d'utiliser:
Puisque c'est (
base64_image
) accessible à partir de$_POST
puisInput::file('base64_image')
ne fonctionnera pas parce queInput::file('base64_image')
vérifie la$_FILES
tableau et il n'y est pas dans votre cas.$result = file_put_contents($path, $image);
Maintenant png image est construite. Mais le fichier est illisible. Est$data['base64_image']
déjà un saveable fichier?$base64_str
?ce que je fais est de l'utilisation de base de manière
Je v le faire!!
J'ai remplacé
$data->base64_image
à$_POST['base64_image']
et ensuite utiliser$result = file_put_contents($path, $image);
au lieu de
Image::make($image->getRealPath())->save($path);
Mais cela ne ressemble pas à un laravel façons. Je vous avez un autre moyen qu'un look plus élégant, s'il vous plaît dites-moi!
$data->base64_image
, il devrait être$data['base64_image']
au lieu de cela, vérifier ma réponse.