Bonjour les gars, j'ai trouvé avec succès une méthode qui prétend créer un fichier d'entrée de fichier dans une chaîne de base 64 dans JavaScript, donc j'ai envoyé avec succès la base 64
String par JSON via AJAX et la chaîne codée de base 64 ressemble à celle-ci. Dans la méthode JSON "Photo": "Données: image / jpeg; base64, / 9j / 4aaqskzjrgabaqeasabiaad / 2wb, etc ...." p>
Ainsi, lorsque la chaîne de base 64 arrive dans le fichier PHP. Le PHP est-ce que c'est magique et stocke avec succès un fichier dans le dossier ciblé où je souhaite que le fichier soit à ce moment-là, lorsque je regarde dans ce dossier, il existe un fichier mais p>
lorsque j'essaie d'ouvrir le fichier photo à Voir l'application Photo Viewer dit quelque chose comme, image.jpg On dirait que nous ne prenons pas en charge ce format de fichier et dans d'autres applications de visualiseur de photos, il dira quelque chose P>
similaire à ce que j'ai mal fait de mal ? P>
Voici mon code P>
index.php strong> p>
4 Réponses :
Je pense que vous devriez abandonner votre méthodologie actuelle entièrement et la remplacer par ceci: puis, sur votre code côté serveur, inspectez les résultats comme: P> <?php
print_r($_POST); // All of your post fields
print_r($_FILES); // All of the file uploads
accepter = "image / *" code>) li>
Le formulaire
Ne prenez pas ce personnel mais je ne demande pas d'autres méthodes que je demande comment puis-je obtenir cette méthode pour travailler afin que je puisse voir l'image au moins je suis au moins consciente de toutes ces méthodes de transfert de données telles que JS formdata (), HTML
Brad a indiqué une manière plus efficace, mais à la suite de votre code, je vois que vous gardez la chaîne pas du résultat de base64_decode.
modifier p> pour p > //Photo upload section
$photo=$upload_info_json_object->photo;
$photo=base64_decode($photo);
sur la ligne 13 de x.php, vous appelez Le préfixe utilisé pour afficher l'image dans un navigateur ( où si le type de fichier n'est pas toujours JPEG , vous voudrez analyser cette première partie également pour que vous sachiez quoi utiliser dans le nom de fichier (au moins si vous vous souciez de la portabilité). P> Si cela ne résout pas votre problème, Démarrez Dépannage progressivement: prenez la valeur de JavaScript et comparez-la à la valeur de PHP avant de décoder. Sont-ils identiques? Souvent, vous pouvez obtenir un encodage supplémentaire (par exemple codé par URL) en fonction de la configuration, il est donc important de l'indiquer. P> Si les chaînes ont l'air identique, je passerais à la Vous pouvez également essayer de tester avec une petite chaîne connue (contourner le codage pour vous assurer que ce n'est pas Le problème), tel qu'un pixel 1x1 pixel noir GIF: p> Vous pouvez tester la même chose directement dans PHP pour éliminer l'un quelconque de l'encodage ou du décodage de l'objet JSON ou de son traitement en transit d'être le problème. p> p>
base64_decode code>, mais n'identifiez pas le résultat. Si devrait lire comme
$ photo = base64_decode ($ photo); code> p> li>
Data: image / jpeg; base64, code>) ne doit pas être inclus dans le fichier écrit. Ainsi, votre décodage final devrait ressembler à quelque chose comme: p> li>
ol>
exploser code>
est la fractionnement sur la première virgule, renvoyant un tableau, et nous accédons juste le deuxième élément qui contient le reste de la chaîne puisque nous la limitait à 2 articles, ce qui signifie qu'il est sécurisé S'il y a une virgule plus tard. (Utilisation de substr code> et
Stros code> peut être un peu plus efficace, c'est une option fine aussi bien) p>
base64_decode < / Code> Fonction et définissez le paramètre facultatif
$ strict code> sur
vrai code>. Cela entraînera de retourner false s'il y a des caractères non de base64 (au lieu de les laisser tomber silencieusement). P>
Je viens de poster une réponse J'ai changé de conseils de code et j'ai pris votre conseil, mais je suis différent de ma réponse et laissez-moi savoir ce que vous pensez pouvoir faire à côté de résoudre le problème suivant que j'ai maintenant.
Thomaswayne, vous manquez de mémoire. Lequel pour @ Brad's Point est pourquoi vous ne devriez pas le faire de cette façon. Les téléchargements croisés via les données de formulaire JavaScript sont déjà possibles avec les stratégies de Cors appropriées définies sur le serveur acceptant et n'impliquent pas le traitement des chaînes. J'ai essayé d'aider à la question initiale au cas où cela pourrait aider les autres problèmes de base64, mais je ne pense pas qu'il y ait beaucoup que vous puissiez faire pour votre cas d'utilisation pour continuer à descendre cette route.
Hey Tout au monde, j'ai découvert une raison pour une raison quelconque la chaîne de base 64 est structurée dans le JSON semble ne pas être compatible au côté PHP. J'ai fait un test dans lequel j'ai envoyé une chaîne codée de base 64 dans un objet JSON au côté PHP et je le comparais à une chaîne de base codée 64 du même fichier de
https://www.browrowserling.com/tools/image-a-base64 dans une instruction Si Sincer, par exemple si strong> pour le match et sinon strong> où il est dit que cela ne correspond pas à ma surprise, j'ai découvert que cela m'a donné la déclaration d'autre signification, ils ne correspondent pas au message, alors j'ai découvert que le manière La chaîne de base 64 est p> codée et structurée au côté JavaScript n'est pas en cours de lecture dans le côté PHP.
C'est pourquoi, toutes les applications des visionneuses de photos ne pouvaient pas lire la photo. Je suppose que ses certains caractères de la chaîne JSON codée de base 64 codée, mais les deux cordes comparées de mon si P> Signal test test ressemble exactement à la même chose, donc j'ai résolu ce problème en googling pour un
méthode qui peut échapper aux caractères spéciaux du côté du client et j'ai trouvé cette méthode
Appelez Encodégonant (); il échappe à des caractères spéciaux mais pour les URL, donc j'ai bien dit que je suis P> m ma qui l'essayer à ma surprise lorsque j'ai utilisé cela sur la chaîne de base codée 64 pour l'objet JSON, il a réussi à obtenir cette base 64 chaîne compréhensible dans Le côté du serveur PHP et j'ai pu voir la photo sans problèmes p> voici mon exemple de travail P> <?php
$upload_info_json_object = json_decode($_POST['upload_info_json_object']);
$first_name= $upload_info_json_object->first_name;
$last_name= $upload_info_json_object->last_name;
//Photo upload section
$photo= $upload_info_json_object->photo;
//Decode into a file
$photo= base64_decode($photo);
file_put_contents('geeksforgeeks-22.jpg',$photo);
//
?>
<h1><?php echo $first_name.' '.$last_name.' just uploaded a photo.'; ?></h1>