it-swarm.com.de

Erstellen Sie eine Zip-Datei aus einer Liste ausgewählter Dateien und laden Sie die komprimierte Datei in Drupal 8) herunter

Wie erstelle ich eine Zip-Datei programmgesteuert basierend auf den in Drupal 8?) Ausgewählten Dateien? Gibt es in Drupal 8) bereits eine Klasse?

Gemäß der folgenden Antwort verwende ich folgenden Code, um eine Zip-Datei zu generieren:

$file = \Drupal\file\Entity\File::load($fileId);
$fileUri = \Drupal::service('file_system')->realpath($file->getFileUri());

$Zip = \Drupal::service('plugin.manager.archiver')->getInstance(['f‌​ilepath' => '/foo/bar.Zip']);
$Zip->add($fileUri);
  • Die obige Datei bar.Zip sollte im oben angegebenen Pfad vorhanden sein: /foo/bar.Zip.
  • Wie reduziere ich auch die Ordnerstruktur der Zip-Datei, sodass die Datei sites/default/files/myimage.png ist myimage.png?
2
ARUN

Verwenden Sie ArchiverManager und rufen Sie die Instanz ab, indem Sie die Methode getInstance() aufrufen. Eine Zip Klasse wird zurückgegeben. Die Klasse Drupal Zip verwendet die Klasse ZipArchive von PHP, um das schwere Heben durchzuführen.

Beispiel (bearbeitet nach Bemerkung @Clive):

$file = \Drupal\file\Entity\File::load($fileId);
$fileUri = \Drupal::service('file_system')->realpath($file->getFileUri());

$Zip = \Drupal::service('plugin.manager.archiver')->getInstance(['f‌​ilepath' => '/foo/bar.Zip']);
$Zip->add($fileUri);
4
mvdgun

Der folgende Beispielcode funktioniert einwandfrei, um eine Zip-Datei in Drupal 8) zu erstellen.

$file = File::load($file_id);
$filename = $file->getFilename();
$file_path = \Drupal::service('file_system')->realpath($file->getFileUri());
$destination = \Drupal::service('file_system')->realpath('public://foldername');
$Zip = new \ZipArchive;
$Zip->open($destination . "\dump.Zip", constant("ZipArchive::CREATE"));
$Zip->addFile($file_path, $filename);
$Zip->close();

Weitere Informationen finden Sie unter Backup and Migrate Modul-Soruce-Code.

Hinweis :

  1. Erstellen Sie den Zielordner, bevor Sie den obigen Code ausführen.
  2. Bitte stellen Sie sicher, dass PHP Zip- und Gd-Bibliotheken auf dem Server installiert und aktiviert sind.
  3. Es wird empfohlen, eine externe Zip-Erstellungsbibliothek zu verwenden, wenn der Server die Klasse zipArchive nicht unterstützt.
0