Je pensais trouver une solution à ce problème relativement facilement, mais je demande ici à l'aide de vos dieux de me tirer de cette énigme.
Alors, j'ai une image et je veux Stockez-le dans un document XML à l'aide de Java. J'ai déjà atteint cela dans Visualbasic en enregistrant l'image dans un flux, convertissant le flux en une matrice, puis la classe XML de VB a été capable de coder le tableau comme une chaîne de base64. Mais, après quelques heures de nettoyage du Net pour une solution équivalente en Java, je suis revenu des mains vides. Le seul succès que j'ai eu a été par: p> qui va, je suppose, mais renversant le processus pour le récupérer à une image lorsque je charge le fichier XML a prouvé impossible. Si quelqu'un a un meilleur moyen d'encoder / de décoder une image dans un fichier XML, veuillez vous avancer, même s'il s'agit simplement d'un lien vers un autre fil irait bien. P> Cheers à l'avance, P> hoopla. p> p>
10 Réponses :
Apache Commons a un base64 a > classe qui devrait vous aider à vous: p>
De là, vous pouvez simplement écrire les octets (ils sont déjà dans un format lisible) p>
Cheers Mate, c'est un forfait beaucoup de Néater!
Votre arraytostring () code> est plutôt bizarre (quel est le point de ce séparateur?). Pourquoi ne pas simplement dire
byte[] array = s.getBytes("US-ASCII");
Merci Michael, avec certitude, j'étais serré comme des pailles et j'ai copié l'exemple de quelqu'un de la façon de convertir le tableau sans vraiment y penser. Maintenant en utilisant Apaches Commons. Acclamations pour des conseils
Après avoir obtenu votre tableau d'octet Utilisez une chaîne codée: p> alors vous pouvez faire des choses amusantes dans votre xml comme p>
J'ai fait quelque chose de similaire (codage et décodage dans la base64) et cela a fonctionné comme un charme. Voici ce que je pense que vous devriez faire, en utilisant la classe espère que cela aide. p> p> base64 code>
du projet Apache Commons:
Obrigado Joao! @Joaosilva
Le problème de base est que vous ne pouvez pas avoir de bytestream arbitraire dans un document XML, vous devez donc l'encoder en quelque sorte. Un schéma de codage fréquent est la base64, mais tout sera aussi long que le destinataire le sait. P>
Vous n'avez pas besoin d'inventer votre propre type de données XML pour cela. XML Schema définit des types de données binaires standard, tels que Base64Binary a>, ce qui est exactement ce que vous essayez de faire. P>
Une fois que vous utilisez les types standard, il peut être converti automatiquement en binaire par certains analyseurs (comme Xmlbeans). Si votre analyseur ne le gère pas, vous pouvez trouver des cours pour BASE64Binary dans de nombreux endroits car le type de données est largement utilisé dans le savon, XMLSEC, etc. P>
Avec Java 6, vous pouvez utiliser Datatypeconverter pour convertir un tableau d'octets en une chaîne de base64: et pour le convertir: p> String base64String = ...
byte[] imageData = DatatypeConverter.parseBase64Binary(base64String);
Mise en œuvre la plus simple que j'ai pu effectuer est comme ci-dessous, ce qui provient du serveur au transfert XML de serveur contenant de la base de données binaires64 provient de la bibliothèque Codec Apache: - lire des données binaires de dB et créer XML
byte[] bData = strClassByteCode.getBytes("US-ASCII"); bData = Base64.decodeBase64(bData); oPrStmt.setBytes( ++nParam, bData );
- sur demande de serveur Lire la balise et enregistrez-la dans dB li> ul>
Blob blobData = oRs.getBlob("ClassByteCode"); byte[] bData = blobData.getBytes(1, (int)blobData.length()); bData = Base64.encodeBase64(bData); String strClassByteCode = new String(bData,"US-ASCII");
- Vishesh Sahu Li> ul> p>
Je sais que la question aking comment encoder une image via XML, mais il est également possible de simplement diffuser les octets via une demande HTTP GET au lieu d'utiliser XML et de coder une image. Notez que l'entrée est un fichierInputStream code>.
Code serveur:
FileOutputStream out = new FileOutputStream("path/to/file.png");
for(int i : result_bytes_list){
out.write(i);
}
out.close();
node.setTextContent( base64.encodeAsString( fileBytes ) ) using org.apache.commons.codec.binary.Base64
Je vais être entièrement inutile, mais: pourquoi? Pourquoi voulez-vous stocker des images dans XML? Y a-t-il une meilleure manière de faire cela? Si je me suis retrouvé dans cette situation, je reconsidérerais ce que je vais et pourquoi.
Bonjour Mike, c'est un point valable - il est peut-être un meilleur moyen et j'ouvre des suggestions. L'objectif principal du document XML est de stocker des informations sur une université. Il conserve un éventail de campus qui maintiennent à son tour des tableaux de chambres. Les images que je stocke sont des cartes pour les campus. J'ai pensé que XML était probablement le meilleur moyen de stocker des données parent-enfant. Mais s'il vous plaît laissez-moi savoir si vous avez une meilleure suggestion!