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 stream
set zipStream = ##class(%Stream.FileBinary).%New()
// Link the stream to the file
do zipStream.LinkToFile(pFileName)
// Call the unzip method
set sc = ##class(ZIP.demo).UnzipStream(zipStream, "/tmp/unzip")
Quit sc
}
ClassMethod UnzipStream(
pZipStream As %Stream.GlobalBinary,
pDestDir As %String) As %Status
{
// Import python lib unzip
set unzip = ##class(%SYS.Python).Import("zipfile")
// Write the stream to a temporary file
set tZipStream = ##class(%Stream.FileBinary).%New()
do tZipStream.LinkToFile("/tmp/zipfile.zip")
do tZipStream.CopyFromAndSave(pZipStream)
// Create a new zip object
set zip = unzip.ZipFile("/tmp/zipfile.zip")
// Extract the zip file
do zip.extractall(pDestDir)
// Close the zip file
do zip.close()
Quit $$$OK
}
}
Merci, ça marche avec la lib unzip