Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Powerscripts
  •  » [RESOLU] Récupérer un fichier encodé en base64 via PB

#1 28-03-2013 12:13:22

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

[RESOLU] Récupérer un fichier encodé en base64 via PB

Bonjour,

Dans l'utilisation d'un web service, j'ai besoin de récupérer un fichier encodé en base64, afin de le rapatrier en local et de l'ouvrir (il s'agit en fait d'un fichier pdf).

en dot.net cela s'écrit

Code:

byte[] binaryData = null;
binaryData = Convert.FromBase64String(pageResultsReply.PageResults.Data[0].Value);

puis

Code:

System.IO.FileStream outFile = new System.IO.FileStream('c:\\test.pdf", System.IO.FileMode.Create, System.IO.FileAccess.Write);
outFile.Write(binaryData, 0, binaryData.Length);
outFile.Close();

Mais voilà, comment je traduit cela en PB ?

Merci d'avance,

PB version 12.1

Hors ligne

 

#2 28-03-2013 13:42:58

_francois_  
Bienfaiteur du site
Lieu: TOULOUSE
Date d'inscription: 25-03-2010
Messages: 151
Pépites: 178,983,268,111
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

Bonjour,

les manipulations de binaires sont très lentes avec PB
Quand j'ai eu besoin de faire l'inverse de ton cas (c'est à dire envoyer un fichier à un Webservice) je suis passé par un OLE XMLDOM

Code: pb

string    ls_retour
blob    lblb_fichier
long    ll_fp
oleobject  loo_xml, loo_tmp

loo_xml = CREATE oleobject
loo_xml.connectToNewObject("Microsoft.XMLDOM")

ll_fp = fileOpen(ls_chemin,StreamMode!,Read!,Shared!)
fileReadEx(ll_fp,lblb_fichier)
fileClose(ll_fp)

loo_tmp = loo_xml.createElement("tmp")
loo_tmp.datatype = "bin.base64"
loo_tmp.nodeTypedValue = lblb_fichier
ls_retour = string(loo_tmp.text)

loo_xml.disconnectObject()
DESTROY loo_xml


En gros dans ton cas il faut faire l'inverse (je n'ai pas testé mais ça doit être possible)

Sinon dans la dernière application que je suis en train de faire je me suis mis à faire des objets COM Visible en .net que j'instancie dans PB
Exemple en VB.net

Code: vb

Namespace MyVBHelpers

    <ComVisible(True)> _
    <ProgId("MyVBHelpers.PictureHandler")> _
    <ClassInterface(ClassInterfaceType.AutoDual)> _
Public Class PictureHandler
Public Function CreerMiniature(ByVal blob As Byte(), ByVal largeur As Int32, ByVal hauteur As Int32, ByVal formatSource As String) As Byte()
Dim miniature As Byte() = New Byte() {}
' du traitement...
            GC.Collect()
            Return miniature
        End Function


Il faut enregistrer la dll VB.net avec regasm

puis dans PB

Code: pb

oleobject loo_ph
blob lblb_miniature
loo_ph = CREATE oleobject
loo_ph.ConnectToNewObject("MyVBHelpers.PictureHandler")
lblb_miniature = loo_ph.CreerMiniature(ablb_fichier,210,297,as_extension)
...


sachant que dans ton cas il ne s'agit pas de créer une miniature mais tout simplement d'écrire le fichier. c'est juste un exemple pour te montrer comment faire.

Sinon il me semble avoir vu passé une librairie PBNI pour les binaires ( http://pbadonf.fr/forum/viewtopic.php?id=3882 ).

Hors ligne

 

#3 28-03-2013 15:03:53

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#4 28-03-2013 15:09:33

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

erasorz a écrit:

Sinon, il y aussi : http://pbadonf.fr/forum/viewtopic.php?id=1905

Semble plus simple et moins lourd que l'objet COM.
Le seul point où j'accroche c'est pour

décompresser l'archive et copier Base64.dll dans c:\windows\system32

c'est quand même plus propre de ne pas polluer les répertoires système et de conserver base64.dll avec le reste de l'application (le regsvr32 reste valable ailleurs que dans system32)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 28-03-2013 16:16:48

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

seki a écrit:

erasorz a écrit:

Sinon, il y aussi : http://pbadonf.fr/forum/viewtopic.php?id=1905

Semble plus simple et moins lourd que l'objet COM.
Le seul point où j'accroche c'est pour

décompresser l'archive et copier Base64.dll dans c:\windows\system32

c'est quand même plus propre de ne pas polluer les répertoires système et de conserver base64.dll avec le reste de l'application (le regsvr32 reste valable ailleurs que dans system32)


Mouais, un fichier de 32ko de plus dans le fatras Windows...
J'avais suggéré dans system32 vu que la plupart de ce genre de DLL sont placées ici, mais après chacun le met où il veut


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 28-03-2013 16:59:54

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

Bonjour,

Merci pour vos réponses, j'ai trouvé aussi cela lien pour base64

Je vous tiens au courant, mais du coup quelle méthode choisir, y'a-t-il une préférence ?

Merci

Hors ligne

 

#7 28-03-2013 19:58:23

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

Bonjour,

Pour ma part, j'utilise la méthode of_decode64 disponible dans l'objet n_winsock de EmailSMTP téléchargeable sur : http://www.topwizprogramming.com/freeco … lsmtp.html

Cette méthode implémente effectivement l'appel à la fonction de l'API : CryptStringToBinary telle que tu le décris dans ton lien.

Hors ligne

 

#8 29-03-2013 14:55:06

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

Bonjour,

Les 2 méthodes fonctionnent correctement, et dans les 2 cas il faut enregistrer une dll.

Par contre, je n'obtiens pas le résultat attendu.

En fait, le fichier que je cherche à récupérer est sous la forme d'une chaîne de bytes dans une zone sous forme de string, le tout encodé en base64

Comme je le disais au début de ce post, en dot.net cela s'écrit simplement comme cela

Code:

byte[] binaryData = null;
binaryData = Convert.FromBase64String(ma_valeur);

Sauf que dans PB, je ne sais pas comment interpréter le code si dessus.

Savez-vous comment je peux solutionner mon problème ?

Merci d'avance,

Hors ligne

 

#9 29-03-2013 15:56:20

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

-> DecodeToFile


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#10 29-03-2013 16:09:48

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

erasorz a écrit:

-> DecodeToFile

Je ne comprend pas la réponse (ou alors je suis très fatiguée), c'est quoi DecodeToFile ? En PB bien sur

Merci d'avance,

Hors ligne

 

#11 29-03-2013 16:15:32

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

wazou1812 a écrit:

erasorz a écrit:

-> DecodeToFile

Je ne comprend pas la réponse (ou alors je suis très fatiguée), c'est quoi DecodeToFile ? En PB bien sur

Merci d'avance,

ok, j'ai compris, j'essaye la solution

merci

Hors ligne

 

#12 29-03-2013 17:07:45

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: [RESOLU] Récupérer un fichier encodé en base64 via PB

wazou1812 a écrit:

wazou1812 a écrit:

erasorz a écrit:

-> DecodeToFile

Je ne comprend pas la réponse (ou alors je suis très fatiguée), c'est quoi DecodeToFile ? En PB bien sur

Merci d'avance,

ok, j'ai compris, j'essaye la solution

merci

DecodeToFile avec la dll Base64.dll , mais c'est bien sur, ça marche du feu de dieu


Merci à tous et bon week end Pascal, et n'oubliez pas de changer d'heure dimanche matin, c'est l'heure d'été.

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » [RESOLU] Récupérer un fichier encodé en base64 via PB

Pied de page des forums

Propulsé par FluxBB 1.2.22