So speichern Sie ein Bild im Serverordner in PHP
P粉754473468
P粉754473468 2023-07-19 19:47:03
0
1
433

Ich habe diesen HTML-Code:

<div id="container">
   <div id="calendar">
   </div>
 </div>
<button class="btn btn-dark mb-1" onclick="captureAndSave()">Format</button>

Es gibt auch diesen JS-Code

<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>

Durch Drücken der Schaltfläche sollte das Bild des Inhalts „section.content“ heruntergeladen werden, oder? Eigentlich wird dieser Vorgang erfolgreich ausgeführt, aber wenn ich versuche, diesen Code so zu ändern, dass er das Bild in den Serverordner herunterlädt, anstatt es auf den Computer des Benutzers herunterzuladen, gelingt mir das nicht.

Ich habe diese Methode ausprobiert:

<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>

Ich habe versucht, einen auf dem Server gespeicherten PHP-Code namens „image.php“ zu verwalten, aber ohne Erfolg:

<?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);
?>

Irgendwelche Vorschläge für Änderungen, die ich vornehmen kann, oder einen besseren Weg, das zu erreichen, was ich will? Zunächst einmal vielen Dank.

P粉754473468
P粉754473468

Antworte allen(1)
P粉680087550

有一件事引起了我的注意,那就是你为$filePath变量定义的路径。如果你想要上传文件的完整目录树不存在,写入操作将会失败。

您可以使用以下代码来确保到您要写入的文件的目录树存在,然后再尝试写入它。

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

您还可以使用异常处理来确定错误的类型,以便进行调试。默认情况下,file_put_contents只会返回一个警告,因此让PHP抛出异常可能超出了您的项目范围。

检查您的PHP日志也可以帮助您找出问题的原因。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage