Question
· Oct 17, 2023

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

Version du produit: IRIS 2023.2
Discussion (3)2
Connectez-vous ou inscrivez-vous pour continuer

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
}

}