コンテンツへスキップ

はじめに

  1. パッケージのインストール

    Terminal window
    npm i @capgo/capacitor-zip
  2. ネイティブプロジェクトとの同期

    Terminal window
    npx cap sync

プラグインをインポートして、ファイルを圧縮または展開します:

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!');
};

ソースフォルダからZIPアーカイブを作成します。

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'
});

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

進捗追跡付きアーカイブの作成

Section titled “進捗追跡付きアーカイブの作成”
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;
}
};
  1. パスの検証: 操作前に必ずソースと宛先のパスを検証してください
  2. エラー処理: すべてのzip/unzip操作をtry-catchブロックでラップしてください
  3. クリーンアップ: 操作後に一時ファイルとフォルダを削除してください
  4. 大きなファイル: モバイルデバイスでの大きなアーカイブには注意してください
  5. 権限: アプリに必要なファイルシステムの権限があることを確認してください

Zip操作が失敗する: ソースパスが存在し、アクセス可能であることを確認してください Unzipが失敗する: ZIPファイルが有効で、宛先パスが書き込み可能であることを確認してください ストレージ不足: 操作前に利用可能なディスク容量を監視してください 権限拒否: アプリ設定でファイルシステムの権限を確認してください