7
votes

Comment envoyer des données binaires dans une chaîne XML

Je veux envoyer un fichier binaire au composant .net C # dans le format XML suivant

   FileStream fs = new FileStream(_filePath, FileMode.Open, FileAccess.Read);
   using (Stream input = fs)
   {
      byte[] buffer = new byte[8192];
      int bytesRead;
      while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
      {}
   }
   return buffer;


1 commentaires

Pourquoi avez-vous besoin d'envelopper vos données binaires dans XML?


4 Réponses :


4
votes

Pouvez-vous baser64 vos octets? MSDN ref: Convert.Tobase64 , Convert.frombase64String


4 commentaires

Comment puis-je le convertir? Une fois converti en chaîne, les octets ne peuvent pas être utilisés pour recréer le fichier, non?


Convert.frombase64string convertira la chaîne en arrière à un tableau d'octets


Merci! Je prévoyais d'utiliser bientôt la cryptographie.frombase64Transform parce que je ne connaissais pas ces méthodes plus faciles.


Merci Russau - va essayer cela.




0
votes

Vous mentionnez que vous appelez un composant C #. Je ne sais pas que je comprends pourquoi utiliser ce composant signifie que vous devez créer une chaîne XML.

est-il possible de définir des classes pour contenir vos données au lieu d'utiliser une chaîne XML? E.g. xxx

puis l'appelant du composant définit simplement le type de type et l'octet []. L'interface du composant serait alors plus explicitement définie (Classe de FileData par opposition à la chaîne plus générique ou xmldocument).


1 commentaires

Merci Tuzo. En fait, mon appel d'appel tente de simuler comment Siebel appellera mon composant. télécharger.oracle.com/docs/cd/e05553_01/ Livres / EScript / ... Je ne sais pas si cela peut définir les propriétés de mes composants comme j'en ai besoin. Donc, je travaille sur l'angle d'envoi des données dans XML.



9
votes

La représentation de base64 est universelle utilisée pour représenter des données binaires.

        // Convert the Base64 UUEncoded input into binary output.
        byte[] binaryData;
        try {
            binaryData = 
                System.Convert.FromBase64String(base64String);
        }
        catch (System.ArgumentNullException) {
            System.Console.WriteLine("Base 64 string is null.");
            return;
        }
        catch (System.FormatException) {
            System.Console.WriteLine("Base 64 string length is not " +
                "4 or is not an even multiple of 4." );
            return;
        }


3 commentaires

Tiny Nitpick: Uuencoding et base64 sont deux choses différentes. EN.Wikipedia.org/wiki/uuencoded en.wikipedia.org/wiki/base64


@Russau True, mais documentation telle que Convert.Tobase64String Ne vous aide pas (cochez la section remarques ;-).


Je noterais seulement que dire la base64 est une méthode "universelle" n'est pas précise. Je rencontre actuellement des problèmes amusants créant XML avec une TIF intégrée. Il doit imiter une autre interface d'un fournisseur dont le code source que je n'ai pas accès à. Cependant, ils heurtent littéralement le binaire dans le XML - pas de base64 codé du tout. J'ai vu cela dans d'autres circonstances dans d'autres industries. C'est probablement le moyen le plus intelligent d'aller, mais c'est loin d'être universel.