2017-09-06 7 views
0

J'ai écrit une application Android pour envoyer du texte (qui devrait être enregistré dans un fichier) et une image (qui devrait être sauvegardée dans un fichier séparé) avec un HTTP- POST -Request en utilisant le volley lib.Comment sauvegarder une image encodée en base64 en utilisant node-red

L'image est convertie en un tableau d'octets. Ce tableau d'octets est converti en chaîne en utilisant Base64.encodeToString(). Cette chaîne est définie en tant qu'attribut dans un objet JSON qui est envoyé au serveur.

L'interface du côté serveur est un serveur node-red: Les données sont reçues et les noms de fichiers et le texte sont extraits. Jusqu'à présent, tout fonctionne bien. Mais lors de la sauvegarde de l'image (qui est une chaîne encodée en Base64) écrit seulement la chaîne dans un fichier jpg.

Ce qu'il reste à faire est de décoder la chaîne d'image et de l'enregistrer en tant qu'image. Je ne sais pas comment faire ça. J'ai essayé l'approche this, mais le nœud-rouge ne sait pas Image().

Aussi je n'ai pas entièrement compris, pourquoi le meilleur moyen d'envoyer une image est de l'analyser en un byte-array et de coder ce tableau en tant que chaîne Base64. Si quelqu'un pouvait expliquer l'idée ou me lier un tutoriel, cela pourrait m'aider.

S'il vous plaît laissez-moi savoir si vous avez besoin de mon app-code/node-red-flows pour aider.

+0

Nous ne pouvons pas vous expliquer pourquoi ** vous ** avez choisi de coder en base64 l'image avant de l'envoyer. – hardillb

+0

bien ... vous avez raison, mais la plupart des tutoriels que j'ai trouvés l'ont fait de cette façon. Donc, je pensais que c'est fait pour une raison – user2699453

Répondre

1

Il existe un noeud Node-RED base64 (node-red-node-base64) qui convertit une chaîne codée en base64 en un tampon binaire NodeJS.

Si vous exécutez votre chaîne à travers ceci avant de l'envoyer à un noeud de fichier, vous obtiendrez une image correctement formatée.

+0

merci pour la réponse rapide. J'ai essayé ce noeud, mais je ne peux toujours pas ouvrir les images. Je passe la chaîne d'image en tant que charge utile à ce noeud. la charge utile qui en résulte doit être le contenu du fichier jpg. Est-ce que j'ai compris cela? – user2699453

+0

J'ai essayé d'ouvrir les fichiers et mon programme m'a dit "Erreur d'interprétation du fichier image JPEG (pas un fichier JPEG: commence par 0x4c 0x7a)". Si l'image que je capture est un jpg et je l'encoder et l'envoyer au serveur, il devrait toujours être un jpg, n'est-ce pas? J'ai eu cette erreur avec deux images différentes – user2699453

+0

En supposant que ce que vous avez encodé sur le côté Android est un flux jpeg correctement formaté, alors cela devrait faire ce que vous avez besoin. – hardillb

0

J'ai résolu ce problème. Pour tout le monde qui cherche une réponse je poste ceci:

Le base64 Node-RED node hardillb mentionné dans son answer fonctionne très bien, mais seulement si la chaîne entière est dans une ligne.

Si vous utilisez la fonction encodeToString() avec le drapeau Base64.DEFAULT comme ceci: String returnString = Base64.encodeToString(bytes, Base64.DEFAULT); Votre recieve une chaîne multi-ligne. Si vous utilisez l'indicateur Base64.NO_WRAP, cela fonctionne correctement avec le nœud.