Passer au contenu

Commencer

  1. Installez le package

    Fenêtre de terminal
    npm i @capgo/capacitor-zip
  2. Synchronisation avec les projets natifs

    Fenêtre de terminal
    npx cap sync

Importez le plugin et zippez ou décompressez les fichiers :

import { CapacitorZip } from '@capgo/capacitor-zip';
// Zip a folder
const zipFolder = async () => {
await CapacitorZip.zip({
source: 'file:///path/to/folder',
destination: 'file:///path/to/archive.zip'
});
console.log('Folder zipped successfully!');
};
// Unzip an archive
const unzipArchive = async () => {
await CapacitorZip.unzip({
source: 'file:///path/to/archive.zip',
destination: 'file:///path/to/output/folder'
});
console.log('Archive extracted successfully!');
};

Crée une archive ZIP à partir d’un dossier source.

interface ZipOptions {
source: string; // Path to folder to compress
destination: string; // Path for output ZIP file
}
await CapacitorZip.zip({
source: 'file:///path/to/folder',
destination: 'file:///path/to/archive.zip'
});

Extrait les fichiers d’une archive ZIP.

interface UnzipOptions {
source: string; // Path to ZIP file
destination: string; // Path to extract to
}
await CapacitorZip.unzip({
source: 'file:///path/to/archive.zip',
destination: 'file:///path/to/output/folder'
});
import { CapacitorZip } from '@capgo/capacitor-zip';
import { Filesystem, Directory } from '@capacitor/filesystem';
export class ZipService {
async createBackup() {
try {
const timestamp = Date.now();
const sourceDir = `${Filesystem.Directory.Data}/userdata`;
const destPath = `${Filesystem.Directory.Documents}/backup_${timestamp}.zip`;
await CapacitorZip.zip({
source: sourceDir,
destination: destPath
});
console.log('Backup created:', destPath);
return destPath;
} catch (error) {
console.error('Backup failed:', error);
throw error;
}
}
async restoreBackup(backupPath: string) {
try {
const destDir = `${Filesystem.Directory.Data}/userdata`;
// Clear existing data
await Filesystem.rmdir({
path: 'userdata',
directory: Directory.Data,
recursive: true
});
// Extract backup
await CapacitorZip.unzip({
source: backupPath,
destination: destDir
});
console.log('Backup restored successfully');
} catch (error) {
console.error('Restore failed:', error);
throw error;
}
}
async compressFiles(filePaths: string[], outputPath: string) {
try {
// Create temporary directory
const tempDir = `${Filesystem.Directory.Cache}/temp_zip_${Date.now()}`;
await Filesystem.mkdir({
path: tempDir,
directory: Directory.Cache,
recursive: true
});
// Copy files to temp directory
for (const filePath of filePaths) {
const fileName = filePath.split('/').pop();
await Filesystem.copy({
from: filePath,
to: `${tempDir}/${fileName}`
});
}
// Zip the temp directory
await CapacitorZip.zip({
source: tempDir,
destination: outputPath
});
// Clean up temp directory
await Filesystem.rmdir({
path: tempDir,
directory: Directory.Cache,
recursive: true
});
return outputPath;
} catch (error) {
console.error('Compression failed:', error);
throw error;
}
}
async extractSpecificFiles(zipPath: string, fileNames: string[]) {
try {
// Extract to temp location
const tempDir = `${Filesystem.Directory.Cache}/temp_extract_${Date.now()}`;
await CapacitorZip.unzip({
source: zipPath,
destination: tempDir
});
// Read only specific files
const extractedFiles: { [key: string]: string } = {};
for (const fileName of fileNames) {
const content = await Filesystem.readFile({
path: `${tempDir}/${fileName}`,
directory: Directory.Cache
});
extractedFiles[fileName] = content.data;
}
// Clean up
await Filesystem.rmdir({
path: tempDir,
directory: Directory.Cache,
recursive: true
});
return extractedFiles;
} catch (error) {
console.error('Extraction failed:', error);
throw error;
}
}
}

Création d’archives avec suivi des progrès

Section titled “Création d’archives avec suivi des progrès”
const zipWithProgress = async (source: string, destination: string) => {
console.log('Starting compression...');
try {
await CapacitorZip.zip({ source, destination });
console.log('Compression complete!');
} catch (error) {
console.error('Compression failed:', error);
throw error;
}
};
const batchZip = async (folders: string[]) => {
const results = [];
for (const folder of folders) {
const folderName = folder.split('/').pop();
const zipPath = `${folder}_${Date.now()}.zip`;
try {
await CapacitorZip.zip({
source: folder,
destination: zipPath
});
results.push({ folder, zipPath, success: true });
} catch (error) {
results.push({ folder, error, success: false });
}
}
return results;
};
const createSecureBackup = async (dataPath: string) => {
// Zip the data
const zipPath = `${Filesystem.Directory.Documents}/secure_backup.zip`;
await CapacitorZip.zip({
source: dataPath,
destination: zipPath
});
// Optionally encrypt the zip file here using a crypto plugin
return zipPath;
};
const validateArchive = async (zipPath: string): Promise<boolean> => {
try {
const tempDir = `${Filesystem.Directory.Cache}/validate_${Date.now()}`;
// Try to extract
await CapacitorZip.unzip({
source: zipPath,
destination: tempDir
});
// Clean up
await Filesystem.rmdir({
path: tempDir,
directory: Directory.Cache,
recursive: true
});
return true;
} catch (error) {
console.error('Archive validation failed:', error);
return false;
}
};

## meilleures pratiques

  1. Validation du chemin : validez toujours les chemins source et de destination avant les opérations
  2. Gestion des erreurs : Encapsulez toutes les opérations de zip/décompression dans des blocs try-catch
  3. Nettoyage : supprimez les fichiers et dossiers temporaires après les opérations
  4. Fichiers volumineux : soyez prudent avec les archives volumineuses sur les appareils mobiles
  5. Autorisations : assurez-vous que votre application dispose des autorisations nécessaires sur le système de fichiers.

L’opération Zip échoue : assurez-vous que le chemin source existe et qu’il est accessible Échec de la décompression : vérifiez que le fichier ZIP est valide et que le chemin de destination est accessible en écriture Stockage épuisé : surveillez l’espace disque disponible avant les opérations Autorisation refusée : vérifiez les autorisations du système de fichiers dans la configuration de votre application