J'ai ce code HTML :
<div id="container"> <div id="calendar"> </div> </div> <button class="btn btn-dark mb-1" onclick="captureAndSave()">Format</button>
Il y a aussi ce code js
<script> function captureAndSave() { // Select "calendar" element var elementToCapture = document.querySelector('section.content'); // Hide ".noPrint" elements var elementsToHide = elementToCapture.querySelectorAll('.noPrint'); elementsToHide.forEach(function(element) { element.style.visibility = 'hidden'; }); html2canvas(elementToCapture).then(function(canvas) { var imageBase64 = canvas.toDataURL('image/png'); elementsToHide.forEach(function(element) { element.style.visibility = 'visible'; }); var link = document.createElement('a'); link.href = imageBase64; link.download = 'captura.png'; link.click(); }); } </script>
Appuyer sur le bouton devrait télécharger l'image du contenu "section.content", non ? En fait, cette opération est effectuée avec succès, mais lorsque j'essaie de modifier ce code pour qu'il télécharge l'image dans le dossier du serveur au lieu de la télécharger sur l'ordinateur de l'utilisateur, je n'y parviens pas.
J'ai essayé cette méthode :
<script> function captureAndSave() { var elementToCapture = document.querySelector('section.content'); var elementsToHide = elementToCapture.querySelectorAll('.noPrint'); elementsToHide.forEach(function (element) { element.style.visibility = 'hidden'; }); html2canvas(elementToCapture).then(function (canvas) { var imageBase64 = canvas.toDataURL('image/png'); elementsToHide.forEach(function (element) { element.style.visibility = 'visible'; }); var xhr = new XMLHttpRequest(); xhr.open('POST', 'assets/imagen.php', true); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); var data = 'image=' + encodeURIComponent(imageBase64); xhr.send(data); xhr.onload = function () { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); if (response.success) { alert(response.message); } else { alert('Error: ' + response.message); } } }; }); } </script>
J'ai essayé de gérer un code PHP appelé "image.php" enregistré sur le serveur, mais sans succès :
<?php $response = array(); if(isset($_POST['image'])) { $imageData = $_POST['image']; $filePath = '../vistas/img/temp/imagen.png'; if(file_put_contents($filePath, base64_decode(preg_replace('#^data:image/w+;base64,#i', '', $imageData)))) { $response['success'] = true; $response['message'] = 'The image has been saved successfully.'; } else { $response['success'] = false; $response['message'] = 'There was an error saving the image.'; } } else { $response['success'] = false; $response['message'] = 'No image received.'; } header('Content-type: application/json'); echo json_encode($response); ?>
Des suggestions sur les changements que je peux apporter ou sur une meilleure façon d'atteindre ce que je veux ? Tout d'abord, merci.
Une chose qui a attiré mon attention est le chemin que vous avez défini pour la variable $filePath. Si l'arborescence complète des répertoires dans laquelle vous souhaitez télécharger le fichier n'existe pas, l'opération d'écriture échouera.
Vous pouvez utiliser le code suivant pour vous assurer que l'arborescence des répertoires du fichier que vous souhaitez écrire existe avant d'essayer d'y écrire.
Vous pouvez également utiliser la gestion des exceptions pour déterminer le type d'erreur à des fins de débogage. Par défaut, file_put_contents ne renverra qu'un avertissement, donc le fait que PHP lève des exceptions peut dépasser la portée de votre projet.
La vérification de vos journaux PHP peut également vous aider à déterminer la cause du problème.