Comment enregistrer une image dans le dossier du serveur en PHP
P粉754473468
P粉754473468 2023-07-19 19:47:03
0
1
398

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.

P粉754473468
P粉754473468

répondre à tous(1)
P粉680087550

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.

$directory = dirname($filePath);
if (!is_dir($directory)) {
    mkdir($directory, 0777, true);
}

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!