La création de fichiers ZIP est, de par sa conception, un processus simple et très intuitif. Les utilisateurs de n’importe quel système d’exploitation majeur (Windows, Linux, Mac, etc.) peuvent combiner de nombreux dossiers remplis de fichiers volumineux en quelques clics, réduisant instantanément les lots de documents en archives compressées gérables, ce qui rend le stockage et le partage de ce contenu beaucoup moins fastidieux. . L’ouverture de fichiers ZIP est tout aussi simple : un destinataire en aval d’un fichier ZIP n’a qu’à télécharger et extraire (ou « décompresser ») le contenu du fichier pour accéder au contenu qu’il contient. La protection par mot de passe est la cerise sur le gâteau : n’importe qui peut sécuriser rapidement son archive ZIP avec un mot de passe personnalisé, garantissant que seuls ceux qui disposent des autorisations exactes peuvent accéder au contenu de l’archive.
Cette facilité d’utilisation a fait de .zip une solution extrêmement populaire dans les scénarios de partage de fichiers limités et à grande échelle. Une personne peut créer une seule archive ZIP avec 10 fichiers qu’elle doit partager avec son collègue, tandis qu’une autre peut créer des dizaines de fichiers ZIP contenant des centaines de fichiers chacun, avec plusieurs couches de répertoires dans chaque fichier.
Dans le premier scénario, le téléchargement, l’ouverture et l’accès manuels au fichier ZIP sont assez efficaces. Après tout, il ne s’agit que d’un cas d’utilisation limité, et les quelques secondes passées à télécharger et à extraire (ou simplement à enregistrer) une seule archive ZIP ne sont guère un fardeau ou une distraction par rapport à d’autres tâches. Dans ce dernier scénario, cependant, il y a un défi plus complexe en jeu. Le partage de fichiers à grande échelle de tout type, y compris le partage de fichiers ZIP, rend instantanément le traitement manuel des fichiers moins efficace. En plus de cela, l’organisation spécifique de ces fichiers commence à jouer un rôle plus important. Les archives ZIP larges contiennent souvent des répertoires et sous-répertoires internes qui sont organisés en fonction de hiérarchies pertinentes pour la personne qui a envoyé ces informations, et pas nécessairement pertinentes pour le destinataire. Si, par exemple, une grande archive ZIP est partagée contenant des répertoires pertinents pour plusieurs parties prenantes distinctes avec des autorisations d’accès au stockage distinctes, le processus d’envoi de chaque fichier vers son nouveau domicile deviendra un fardeau. Les fichiers devront être extraits, détournés et stockés (ou re-compressés dans une nouvelle archive), et cela pourrait prendre un temps considérable étant donné le volume de fichiers compressés en jeu.
Heureusement, compte tenu des hiérarchies de répertoires simples en jeu dans les archives ZIP, l’automatisation des API est une excellente solution pour les traiter en gros volumes. L’ouverture, l’extraction et le détournement par programmation du contenu de fichiers ZIP volumineux sont assez simples : une fois les fichiers ZIP traités et leur contenu exposé via la réponse de l’API, les développeurs peuvent créer des scripts pour personnaliser l’emplacement d’envoi de sous-répertoires ou d’encodages de fichiers spécifiques. Ces contenus décompressés peuvent rapidement atteindre la bonne destination et être re-compressés manuellement (ou par programmation) dans une nouvelle archive plus pertinente pour son destinataire.
Manifestation
Dans cet article, je vais mettre en évidence deux API qui peuvent être utilisées pour extraire par programme le contenu d’une archive ZIP. Les deux API peuvent être utilisées gratuitement (jusqu’à 800 appels d’API par mois) avec une clé d’API Cloudmersive gratuite, et elles peuvent être facilement implémentées à l’aide des exemples de code Java prêts à l’emploi fournis plus bas sur la page.
La première de ces deux API est conçue pour extraire et décompresser une archive ZIP régulière (une qui n’a pas de cryptage actif ou de protection par mot de passe). La réponse de cette API renverra tous les répertoires et documents pertinents contenus dans un fichier ZIP d’entrée par rapport à leurs hiérarchies de répertoires, en commençant par tous les fichiers «feuilles mobiles» qui ne sont pas attachés à un répertoire spécifique. Le nom de chaque fichier sera renvoyé avec une chaîne contenant l’encodage de ce fichier, ce qui facilitera la transmission de tout le contenu ci-dessus à l’emplacement de stockage souhaité. Ci-dessous, j’ai inclus un exemple de modèle de réponse JSON pour illustrer la manière dont ces informations sont présentées :
{
"Successful": true,
"FilesInZip": [
{
"FileName": "string",
"FileContents": "string"
}
],
"DirectoriesInZip": [
{
"DirectoryName": "string",
"DirectoriesInDirectory": [
null
],
"FilesInDirectory": [
{
"FileName": "string",
"FileContents": "string"
}
]
}
]
}
La deuxième API peut être utilisée pour déchiffrer et supprimer la protection par mot de passe de ces fichiers ZIP avec des mesures de sécurité actives en place. Seuls le fichier d’entrée et un mot de passe valide sont requis pour appeler cette API, et le corps de la réponse contiendra l’encodage du fichier ZIP déchiffré avec la protection par mot de passe supprimée. Ce fichier peut ensuite être traité par l’API décrite précédemment pour extraction et décompression.
Pour commencer à structurer vos appels d’API, votre première étape consiste à installer le SDK Java. Pour installer avec Maven, ajoutez d’abord la référence suivante au référentiel dans pom.xml :
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Après cela, ajoutez une référence à la dépendance dans pom.xml :
<dependencies>
<dependency>
<groupId>com.github.Cloudmersive</groupId>
<artifactId>Cloudmersive.APIClient.Java</artifactId>
<version>v4.25</version>
</dependency>
</dependencies>
Pour installer avec Gradle, ajoutez-le à votre racine build.gradle à la fin des référentiels :
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Ensuite, ajoutez la dépendance dans build.gradle :
dependencies {
implementation 'com.github.Cloudmersive:Cloudmersive.APIClient.Java:v4.25'
}
Une fois l’installation terminée, votre prochaine étape consiste à structurer chaque demande d’API. Pour appeler l’itération « Extraire, décompresser les dossiers d’une archive ZIP », copiez et collez les exemples de code fournis ci-dessous :
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.ZipArchiveApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
ZipArchiveApi apiInstance = new ZipArchiveApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
try {
ZipExtractResponse result = apiInstance.zipArchiveZipExtract(inputFile);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ZipArchiveApi#zipArchiveZipExtract");
e.printStackTrace();
}
Pour appeler l’itération « Déchiffrer et supprimer la protection par mot de passe », copiez et collez les exemples de code suivants :
// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.ZipArchiveApi;
ApiClient defaultClient = Configuration.getDefaultApiClient();
// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");
ZipArchiveApi apiInstance = new ZipArchiveApi();
File inputFile = new File("/path/to/inputfile"); // File | Input file to perform the operation on.
String zipPassword = "zipPassword_example"; // String | Required; Password for the input archive
try {
Object result = apiInstance.zipArchiveZipDecrypt(inputFile, zipPassword);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ZipArchiveApi#zipArchiveZipDecrypt");
e.printStackTrace();
}
C’est tout le code dont vous aurez besoin pour terminer les deux appels d’API. Il est important de noter que vous ne devez utiliser ces API que pour décompresser des fichiers soigneusement vérifiés provenant de sources en lesquelles vous avez confiance, car les fichiers ZIP sont fréquemment utilisés dans les cyberattaques pour diffuser des logiciels malveillants ou exfiltrer des données d’un système.