Création d'un body JSON avec TRESTRequest, delphi 10.3
Bonjour à tous
je dois faire une application en Delphi 10.3 pour faire signer des documents PDF avec Yousign (un site de signature électronique)
J'arrive à faire un GET : l'authentification se passe correctement et je récupère les noms de signataires en format JSON
Il faut maintenant que j'envoie un PDF à signer encodé en 64bits
le body doit comporter 2 valeurs : le nom (name) et le fichier PDF encodé (content)
avec Postman, tout se passe bien
{
"name": "MonFichier.pdf",
"content": "JVBERi0xLjMNJeLjz9MNCjIzMCAwIG9iag08PC9MaW5lYXJpemVkIDEvTCAxMTI1 etc .."
J’utilise les composants TRESTClient, TRESTRequest et TRESTResponse
Le serveur me renvoie l'erreur 400 Bad Request
Je pense que c'est la création de mon JSON à envoyer qui n'est pas correct
voici mon source :
Code:
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 28 29
| procedure TFYS_principale.BPostFilesClick(Sender: TObject);
var
inStream: TStream;
outStream: TStream;
begin
// chargement du fichier PDF dans un stream
inStream := TFileStream.Create('c:\testpdf\test.pdf', fmOpenRead);
outStream := TStringStream.Create;
// encodage en 64 bits
TNetEncoding.Base64.Encode(inStream, outStream);
outStream.Position := 0;
LJSONObject.AddPair('name','MonFichier.pdf');
LJSONObject.AddPair('content', outStream.ToString);
MonRESTRequest.AddBody(LJSONObject);
MonRESTRequest.Execute;
Restrequest_PostFiles.Execute; // ERREUR 400 : bad request !
memo.Text := RESTResponse_PostFiles.JSONText;
end; |
Si quelqu'un peut m'aider, ça m'avancerait beaucoup
Merci d'avance
Suite upload d'un fichier PDF dans un RESTRequest JSON
Merci encore pour vos remarques mais ça ne fonctionne pas
le body du RESTRequest doit ressembler à ça :
{
"name": "MonFichier.pdf",
"content": "JVBERi0xLjMNJeLjz9MNCjIzMCAwIG9iag08PC9MaW5lYXJpemVkIDEvTCAxMTI1MDAvTyAyMzIvRSA3NzUyMS9OIDIvVCAxMTIxMDcvSCBbIDEzNzEgNDg2XT4+DWVuZG9iag0gICAgICAgICAgICAgDQozMDQgMCBvYmoNPDwvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDUvUHJlZGljdG9yIDEyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0lEWzxGRUQzRjY5MDY3OTA0OEM4RUE2RUFGQjgyQkZCNzM1Qz48QUUyNTY1RTRDOEUzN0Q0ODhEMkRBRDE2OUZGMjBCRTk+XS9JbmRleFsyMzAgMzMzXS9JbmZvIDIyOSAwIFIvTGVuZ3RoIDI0NS9QcmV2IDExMjEwOC9Sb290IDIzMSAwIFIvU2l6ZSA1NjMvVHlwZS9YUmVmL1dbMSAzIDFdPj5zdHJlYW0NCmje7NI/SgNBFMfxN7O7CcsGIlhFiGwVUiQLiRIbG29gJ6T2T+E9UmmRAyQEEVtPkC4BezsvYRphBWHd951mDrDlNB9+vHlvdmZ3rRE5EivSnqhyp9qdaiq8xBEWrF6R+9jzVtGekac4xhhnXnZTLczxlNmEPMAS//DXm3 ... etc "}
ce qui me coince, c'est comment intégrer dans le body du RESTRequest le contenu d'un PDF converti en BASE64.
j'encode le fichier par le code suivant et ça fonctionne
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
var
inStream: TFileStream;
outStream: TMemoryStream;
etc ..
// chargement du fichier PDF dans un stream
inStream := TFileStream.Create('c:\testpdf\test.pdf', fmOpenRead);
outStream := TMemoryStream.Create;
// encodage en 64 bits
TNetEncoding.Base64.Encode(inStream, outStream); |
j'obtiens bien dans le outstream mon PDF Encodé en 64Bits.
ce que je n'arrive pas à faire, c'est l'inclure dans un TJSONObject
J'ai essayé :
Code:
LJSONObject.AddPair('content', outStream.DataString)
mais visiblement ça découpe la chaine de caractères
Merci encore pour vos réponses
Suite upload d'un fichier PDF dans un RESTRequest JSON
Je m'excuse platement ...
ça fonctionne parfaitement maintenant
la prochaine fois, promis, je lirai la réponse avec attention ...:oops:
Merci encore