@CanalQb


PHP + Ajax - JavaScript Compactar pasta



CanalQb



Sempre crie uma frase de segurança única para jogos, Airdrops e qualquer outra coisa de origem desconhecida, em vez de usar sua carteira principal.




Não é possível zipar uma pasta através do navegador sem usar JavaScript ou alguma outra tecnologia do lado do cliente.

OBS: Nunca use essa informação para ter acesso a pasta metamask de outras pessoas que fica em \AppData\Local\Google\Chrome\User Data das pessoas, por favor, essa informação não é para espertinhos!

Uma solução possível é usar JavaScript para fazer uma solicitação AJAX para o servidor e enviar a pasta para o servidor para que ela seja zipada lá.

Aqui está um exemplo básico de como fazer isso usando jQuery:

Adicione o jQuery à sua página HTML: Se você ainda não o fez, adicione o jQuery à sua página HTML: 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
Crie um formulário HTML: Crie um formulário HTML que permita ao usuário escolher a pasta que deseja zipar. Por exemplo: 

<form id="zip-form">
  <label for="folder-input">Selecione uma pasta para zipar:</label>
  <input type="file" id="folder-input" webkitdirectory directory multiple />
  <button type="submit">Zipar</button>
</form>
Este formulário permite que o usuário selecione uma pasta usando o atributo "webkitdirectory" e "directory".

Crie um script jQuery: Crie um script jQuery que faça uma solicitação AJAX para o servidor e envie a pasta para o servidor para que ela seja zipada. Por exemplo: 

$('#zip-form').submit(function(e) {
  e.preventDefault();
  
  var form = $(this);
  var formData = new FormData(form[0]);

  $.ajax({
    url: 'zip-folder.php',
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    success: function(response) {
      alert('Pasta zipada com sucesso!');
    },
    error: function(xhr, status, error) {
      alert('Erro ao zipar a pasta: ' + error);
    }
  });
});
Este script faz uma solicitação POST para o arquivo "zip-folder.php" no servidor, enviando a pasta selecionada pelo usuário. O arquivo "zip-folder.php" deve estar localizado no servidor e ser responsável por zipar a pasta enviada.

Crie o arquivo PHP para zipar a pasta: Crie um arquivo PHP no servidor que zipa a pasta enviada pelo usuário. Por exemplo:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_FILES)) {
  $zip = new ZipArchive();
  $zipFileName = 'folder.zip';

  if ($zip->open($zipFileName, ZIPARCHIVE::CREATE) !== TRUE) {
    exit('Não foi possível criar o arquivo zip.');
  }

  $files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($_FILES['folder-input']['tmp_name'])
  );

  foreach ($files as $name => $file) {
    if (!$file->isDir()) {
      $filePath = $file->getRealPath();
      $relativePath = substr($filePath, strlen($_FILES['folder-input']['tmp_name']) + 1);
      $zip->addFile($filePath, $relativePath);
    }
  }

  $zip->close();

  header('Content-Type: application/zip');
  header('Content-Disposition: attachment; filename=' . $zipFileName);
  header('Content-Length: ' . filesize($zipFileName));
  readfile($zipFileName);
  unlink($zipFileName);
}
?>
Este arquivo PHP cria um arquivo zip contendo todos os arquivos e pastas dentro da pasta enviada pelo usuário. O arquivo zip é então enviado de volta para o navegador como um download usando as cabeçalhos