2017-06-10 4 views
0

J'ai essayé de convertir une chaîne base64 en fichier image en utilisant des méthodes différentes pour les deux derniers jours mais chaque fois que le fichier de sortie n'affiche aucune image (il montre la taille et certains encodés Les données). 1. Le navigateur interprétant le fichier comme document et non image mime mais je suis assez sûr que ce n'est pas le problème car j'ai essayé de télécharger le fichier localy et c'est le même résultat. 2. J'ai essayé de comparer les résultats de sortie des outils en ligne comme codebeautify.org/base64-to-image-converter car il semble que les données dans le fichier image sont différentes de mes données. 3. Répertoire et fichiers ont 775 autorisations et apache ont chownConversion d'image Base64 en fichier retour image/donnée invalide

chaîne base64 ici: https://dpaste.de/gP7D/raw

Méthode A:

list($type, $profile_image) = explode(';', $profile_image); 
       list(,$extension) = explode('/',$type); 
       list(,$profile_image)  = explode(',', $profile_image); 
       if($extension == 'jpeg'){$extension = "jpg";} 
       $filePath = '../uploads/profile_images/'.$uname.'.'.$extension; // using uname instead of unique id to not expose the uqniue key/session 
       $profile_image = base64_decode($profile_image); 
       file_put_contents($filePath, $profile_image); 

Méthode B:

list($type, $profile_image) = explode(';', $profile_image); 
       list(,$extension) = explode('/',$type); 
       list(,$profile_image)  = explode(',', $profile_image); 
       $filePath = '../uploads/profile_images/'.$uname.'.'.$extension; 
       $ifp = fopen($filePath, 'wb'); 
       fwrite($ifp, base64_decode($profile_image)); 
       fclose($ifp); 

Ce que je suis mal faire?

Mise à jour: Apparemment, Apache/php.ini avait un max_input_vars maximum de 5000 alors que ma chaîne base64 étaient beaucoup plus élevés. Ce message peut être marqué comme résolu.

+0

comment c'est la copie si les méthodes montrées dans le message mentionné ne fonctionnent pas pour moi et ont déclaré dans ce fil? – mele

+0

Vous avez raison. Pouvez-vous partager une idée avec le reste du code? –

+0

est une fonction autonome. $ profile_image stocke la chaîne base64 – mele

Répondre

1

fichier Apache/php.ini avait un max_input_vars maximum de 5000 alors que ma chaîne base64 étaient beaucoup plus élevés.

1

Semble que vous devez supprimer le début de votre chaîne codée en base64, qui ne fait pas partie des données codées en base64. Supprimez le "data:image/jpeg;base64" de votre chaîne base64.

Je l'ai fait quelques tests simples et a obtenu l'image ...

+0

Comme le montre le code ci-dessus j'ai utilisé "exploser" pour enlever "data: image/jpeg; base64" ... – mele

+0

le signe virgule après "base64" est pour le rembourrage et ne fait pas partie de la chaîne – mele

+0

I vous suggérons d'écrire une sorte de code simple pour le débogage ... ' Yedidia