Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'avais développé l'utilisation de la dll Base64.dll avec la fonctionnalité DecodeToFile pour décoder un fichier en base64.
Tout fonctionne correctement, tant que le fichier n'est pas trop gros 90ko par exemple.
Avec un fichier qui fait 1100ko et situé sur un serveur distant, le decode ne se passe pas bien, et le fichier final qui est un pdf n'est pas entier et ne peut s'ouvrir car il est 'endommagé'.
Auriez-vous une idée pour contourner ce problème ?
Merci d'avance,
Hors ligne
wazou1812 a écrit:
Bonjour,
J'avais développé l'utilisation de la dll Base64.dll avec la fonctionnalité DecodeToFile pour décoder un fichier en base64.
Tout fonctionne correctement, tant que le fichier n'est pas trop gros 90ko par exemple.
Avec un fichier qui fait 1100ko et situé sur un serveur distant, le decode ne se passe pas bien, et le fichier final qui est un pdf n'est pas entier et ne peut s'ouvrir car il est 'endommagé'.
Auriez-vous une idée pour contourner ce problème ?
Merci d'avance,
Petite précision, si j'essaye de décoder ce même fichier se trouvant en local sur mon poste, je n'ai pas de problème.
Le problème doit donc venir du fait que le fichier se trouve sur un serveur distant et la fonction decodefile ne doit pas avoir le temps de tout décoder.
Il faudrait donc que je trouve la solution pour lui laisser le temps de finir le decode, j'ai essayé d'ajouter Yield ( ) avant le decode, mais cela ne change rien.
Une petite idée serait la bienvenue
Merci d'avance,
Hors ligne
Salut, tu ne peux pas copier temporairement le fichier en local avant de le décoder ?
Hors ligne
erasorz a écrit:
Salut, tu ne peux pas copier temporairement le fichier en local avant de le décoder ?
Bonjour,
Je ne suis pas sur d'avoir l'information, je recherche, (le fichier est stocké sur un serveur de GED), et je ne suis pas sur que l'information soit disponible en clair pour faire un filecopy ou autre subtilité de ce genre.
Mais au cas cela ne serait pas possible, comment je pourrais faire pour que la fonction DecodetoFile prenne le temps de finir le decryptage avant de rendre la main ?
uo_64 = CREATE OLEObject li_rc=uo_64.ConnectToNewObject("Base64Lib.Base64") IF li_rc<0 THEN RETURN -1 END IF uo_64.DecodeToFile (fichier_a_decrypter, nom_fichier_final)
Merci d'avance,
Hors ligne
Bonjour,
peut-être, dans une boucle, tenter d'ouvrir le fichier nom_fichier_final en écriture exclusive ?
Quand ça marche c'est que le decode a terminé non ?
Hors ligne
Geo a écrit:
Bonjour,
peut-être, dans une boucle, tenter d'ouvrir le fichier nom_fichier_final en écriture exclusive ?
Quand ça marche c'est que le decode a terminé non ?
Et bien, non justement, dans ce cas le fichier final est finalement sauvegardé, mais il n'est pas entier, et comme il s'agit d'un pdf, on ne peut plus l'ouvrir.
Et pour le rapatrier avant de le decrypter, cela n'est pas possible, puisque il n'existe pas physiquement dans un répertoire, mais il est stocké dans la base de données de la GED, et donc accessible uniquement via le webservice que nous utilisons.
Le support du webservice, me dit que je peux essayer de créer le fichier en binaire avant de le décrypter pour voir s'il est complet, mais je ne vois pas comment je peux faire cela en PB ?
Merci d'avance de vos nouvelles idées ?
Hors ligne
Que te renvoie l'instruction
uo_64.DecodeToFile (fichier_a_decrypter, nom_fichier_final)
si ça se passe bien, si ça se passe mal ?
Quels sont les différents returns codes possibles ?
De quel type est ta variable fichier_a_decrypter ?
Dernière modification par Geo (23-05-2013 15:25:51)
Hors ligne
Geo a écrit:
Que te renvoie l'instruction
Code:
uo_64.DecodeToFile (fichier_a_decrypter, nom_fichier_final)si ça se passe bien, si ça se passe mal ?
Quels sont les différents returns codes possibles ?
De quel type est ta variable fichier_a_decrypter ?
Le problème est que je n'ai pas l'impression de decodetofile renvoie quelque chise ici.
J'ai essayé avec un string ou un integer, mais pb tombe en erreur ? => Cannot convert oleobject in Any variable
Hors ligne
wazou1812 a écrit:
Geo a écrit:
Que te renvoie l'instruction
Code:
uo_64.DecodeToFile (fichier_a_decrypter, nom_fichier_final)si ça se passe bien, si ça se passe mal ?
Quels sont les différents returns codes possibles ?
De quel type est ta variable fichier_a_decrypter ?Le problème est que je n'ai pas l'impression de decodetofile renvoie quelque chise ici.
J'ai essayé avec un string ou un integer, mais pb tombe en erreur ? => Cannot convert oleobject in Any variable
si je metsCode: pb
any lb_test lb_test = uo_64.DecodeToFile (as_value, is_chemin + as_cdnumecc + ".PDF")
lb_test renvoie null que cela se passe bien ou pas
Hors ligne
As-tu regardé la taille de as_value ? Histoire de vérifier que ce que tu envoies au DecodeToFile(...) est complet.
C'est peut-être à la récupération de as_value qu'il y a déjà un problème.
Hors ligne
Geo a écrit:
As-tu regardé la taille de as_value ? Histoire de vérifier que ce que tu envoies au DecodeToFile(...) est complet.
C'est peut-être à la récupération de as_value qu'il y a déjà un problème.
Bonjour,
En fait, je viens de trouver la solution, avec la piste donnée par Geo.
Il y a un paramètre (un peu caché) au niveau du web service, qui détermine la taille maximum du fichier à récupérer.
Ce paramètre était positionné à 1000000 de bytes, il a suffit d'augmenter ce paramètre pour que cela fonctionne correctement.
Merci encore à vous pour vos idées,
Hors ligne