Impossible de convertir l'entrée JSON en flux
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:
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 :
Code:
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; |
Fonction de traitement du résultat
Code:
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; |
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.
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