Bonjour,
j'utilise le paquetage utl_compress pour compresser ou décompresser des fichiers (après avoir eu de l'aide dans ce forum )
Par contre, cela ne fonctionnerait que pour le formats gzip.
Comment faire pour le format zip ?
Bonjour,
j'utilise le paquetage utl_compress pour compresser ou décompresser des fichiers (après avoir eu de l'aide dans ce forum )
Par contre, cela ne fonctionnerait que pour le formats gzip.
Comment faire pour le format zip ?
Si tu veux gérer du zip en PLSQL, regarde mon blog developpez
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Merdouille de merdouille !!! Pourquoi g00gle ne m'a pas sorti ton blog
Je me suis e..erdé à tenter (j'y suis pas arrivé) de réinventer l'eau chaude
Faut que je me penche sur ton code.
Merci McM
N'hésite pas si tu as des questions ou des remarques sur le package ou son utilisation.
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Bonjour,
j'essaie de compresser/décompresser un fichier avec les fonctions et procédures présentes dans as_zip mais ça veut pas
J'ai notamment essayé d'appeler save_zip avec le bon directory mais ça ne fonctionne pas. J'ai un message d'erreur "ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur".
Si j'ai un directory MY_DIR avec dedans un fichier toto.zip, que faut-il faire pour le décompresser ?
et, inversement, si j'ai un fichier toto.txt qui peut faire jusqu'à 4 ou 5 Mo, qui faut-il appeler (McM, mais sinon ...) ?
Le package ne gère que le zip en tant que BLOB (avec bien sur lecture/écriture dans un directory Oracle). Il n'y a pas de fonction pour dézipper dans le directory Oracle (faut le faire à la main).
Il y a quelques exemples dans les spec du package, mais c'est vrai que la lecture d'un fichier zip directement sur le serveur n'est pas indiqué.
Exemple qui lit un fichier monzip.zip dans le directory UTL_DIR, et qui affiche les fichiers présents (avec tailles et date), puis récupère chaque fichier dans un BLOB [v_doc]
Affichage de la taille de ce blob (pour montrer qu'on peut en faire ce qu'on veut), et écriture du BLOB dans le directory
Attention, c'est de l'écriture de fichier, pas de la décompression (dans le sens où les fichiers sont créés en date du jour).
Attention² : le nom de fichier (zip_files(i).filename) contient le chemin du fichier dans le zip (s'il y a un répertoire)
J'aurais du changer le nom de la procédure SAVE_ZIP en BLOB2FILE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 DECLARE v_zip BLOB; zip_files as_zip.file_list; v_doc BLOB; BEGIN v_zip := as_zip.file2blob(p_dir =>'UTL_DIR', p_file_name => 'monzip.zip'); zip_files := as_zip.get_file_list( v_zip ); FOR i IN zip_files.FIRST() .. zip_files.LAST LOOP dbms_output.put_line(DBMS_LOB.SUBSTR(zip_files(i).filename,2000,1) ||' '|| TO_CHAR(zip_files(i).datemaj,'DD/MM/RRRR HH24:MI:SS') ||' size:'|| zip_files(i).size_comp ||' / '|| zip_files(i).size_uncomp); v_doc := as_zip.get_file(v_zip, DBMS_LOB.SUBSTR(zip_files(i).filename,2000,1) ); DBMS_OUTPUT.put_line('taille blob:'|| DBMS_LOB.getlength(v_doc)); as_zip.save_zip(p_zipped_blob => v_doc, p_dir => 'UTL_DIR', p_filename => DBMS_LOB.SUBSTR(zip_files(i).filename,2000,1)); END LOOP; END; put_img_1.txt 06/07/2015 19:22:40 size:500 / 3216 taille blob:3216 put_img.txt 07/07/2015 16:08:00 size:766 / 3216 taille blob:3216 rois_NB_1.bmp 06/07/2015 18:44:42 size:514 / 3262 taille blob:3262 rois_NB.bmp 07/07/2015 15:23:42 size:802 / 3262 taille blob:3262 toto.pdf 27/02/2015 13:40:40 size:4318 / 5044 taille blob:5044
Pour la seconde question, tu as des exemples dans le package (specifications du package) mais c'est vrai que le premier est celui d'Anton et regroupe tout.
Pour zipper un fichier dans un nouveau zip (pas le rajouter dans un zip existant)
pour rajouter un fichier (fic2.txt) dans un zip existant sur le serveur (toto.zip)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 declare g_zipped_blob blob; begin as_zip.add1file( g_zipped_blob, 'toto.txt', as_zip.file2blob( 'MYDIR', 'toto.txt' ) ); as_zip.finish_zip( g_zipped_blob ); as_zip.save_zip( g_zipped_blob, 'MYDIR', 'toto.zip' ); dbms_lob.freetemporary( g_zipped_blob ); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DECLARE g_zipped_blob blob; BEGIN g_zipped_blob := as_zip.file2blob( 'MYDIR', 'toto.zip' ); as_zip.init_zip(g_zipped_blob); as_zip.add1file( g_zipped_blob, 'fic2.txt', as_zip.file2blob( 'MYDIR', 'fic2.txt' ) ); as_zip.finish_zip( g_zipped_blob ); as_zip.save_zip( g_zipped_blob, 'MYDIR', 'toto.zip' ); dbms_lob.freetemporary( g_zipped_blob ); END;
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Voila, j'ai modifié le Blog pour rajouter ces exemples qui manquaient.
Merci
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager