Dézipper avec objectScript
Bonjour,
Je cherche à dézipper un fichier zip que je récupère via HTTP avec ObjectScript.
Je récupère de ma requête HTTP un %Stream.GlobalBinary, et via mon BusinessOperation, je crée le fichier Zip.
J'aimerais savoir s'il y a une méthode pour dézipper directement le %Stream.GlobalBinary et avoir le dossier dézipper en sortie ?
Ou sinon quelle méthode permet de dézipper un fichier Zip en ObjectScript ?
Merci d'avance pour votre aide
Comments
Bonjour @Moussa SAMB ,
Habituellement lorsque je dois faire ce type d'opération j'utilise directement un logiciel de compression comme 7zip (ou autres peu importe).
Avec la commande $ZF(-100,...) il est possible d'éxécuter d'autres programmes en ligne de commande.
Essayez d'abord de faire la décompression en ligne de commande dans une invite de commande msdos ou dans un shell (en fonction de votre OS). Lorsque ça fonctionne, tentez d'adapter cela en ObjectScript avec le $ZF -100.
Lorenzo.
Bonjour,
Pour compléter la réponse de Lorenzo, il y aussi les librairies suivantes :
Ou encore utiliser du code python comme car vous utilisez iris 2021.2+:
Class ZIP.demo Extends%RegisteredObject
{
ClassMethod Demo(pFileName As%String) As%Status
{
// Read a zip file into a streamset zipStream = ##class(%Stream.FileBinary).%New()
// Link the stream to the filedo zipStream.LinkToFile(pFileName)
// Call the unzip methodset sc = ##class(ZIP.demo).UnzipStream(zipStream, "/tmp/unzip")
Quit sc
}
ClassMethod UnzipStream(
pZipStream As%Stream.GlobalBinary,
pDestDir As%String) As%Status
{
// Import python lib unzipset unzip = ##class(%SYS.Python).Import("zipfile")
// Write the stream to a temporary fileset tZipStream = ##class(%Stream.FileBinary).%New()
do tZipStream.LinkToFile("/tmp/zipfile.zip")
do tZipStream.CopyFromAndSave(pZipStream)
// Create a new zip objectset zip = unzip.ZipFile("/tmp/zipfile.zip")
// Extract the zip filedo zip.extractall(pDestDir)
// Close the zip filedo zip.close()
Quit$$$OK
}
}
Merci, ça marche avec la lib unzip