Bonjour ou bonsoir ! Comme l'indique le titre, j'ai cette erreur et google ne m'aide pas beaucoup. Avant tout, je voudrais d'abord expliquer ce que je veux faire :
Je veux télécharger une base de données de backup SQLite (.db) qui se trouve sur le serveur (php). Pour cela j'utilise le composant TRESTClient parce que j'y attache un JSON pour faire quelques vérifications avant de valider le téléchargement. Du côté serveur (après tout vérification), je récupère le fichier .db, constitue un tableau d'octet puis renvoie un JSON à mon client delphi.
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $myDb = 'c:/baseDeDonneesBackup.db'; // Le chemin du fichier est correct. $labase = file_get_contents($myDb); for ($i=0; $i < strlen($labase); $i++) { $tab[$i] = mb_ord($labase[$i], "UTF-8"); } echo json_encode(["status" => 1, "base" => $tab],JSON_UNESCAPED_UNICODE);
A partir de ce code php j'obtient un tableau similaire [83,81,76,105,116,101,32,102,111,114,109...].
Du côté de mon client Delphi, je tente d'enregistrer ce tableau (le contenu) dans un fichier en local, et pour cela je procède de la manière suivante :
Fonction de traitement du résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 try RESTRequest.Execute(); reponseSever := TJSONObject.ParseJSONValue(RESTResponse.JSONText); resultat := True; traiterReponseServer(reponseSever); // Le traitement se fait dans cette fonction except on e: Exception do begin resultat := False; end; end;
Normalement (selon moi), je m'attendais à recevoir mon fichier tout tranquillement, mais j'ai une erreur TDBXError avec le message "Impossible de convertir l'entrer JSON en flux". Je me demande bien là où j'ai fait mal fait les choses.
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 procedure TForm1.traiterReponseServer(contenuJson: TJSONValue); var fileName: string; fs : TMemoryStream; aJSON: TJSONArray; mon_stream : TStream; begin fileName := TPath.Combine( Tpath.Combine(Tpath.GetDocumentsPath, 'testerFichier'), 'base.db') ; mon_stream := TStream.Create; aJSON := contenuJson.GetValue<TJSONArray>('info'); mon_stream := TDBXJSONTools.JSONToStream(aJSON); // Le problème est ici. fs := TMemoryStream.Create; fs.LoadFromStream(mon_stream); fs.SaveToFile(fileName); end;
PS : j'ai privilégié TRESTClient pour deux choses principalement : 1. Pas de problème de TLS (Requête en https); 2. J'envoie assez facilement mon JSON.
Mais s'il y a des suggestions sur une meilleur façon de réaliser ce que je veux faire, je suis preneur
Partager