2010-02-21 7 views
2

Je veux afficher un tableau Byte [] dans une chaîne afin que je puisse l'envoyer le long d'un HTTPRequest. Peut-il être fait? Et le serveur va-t-il récupérer les données et en créer un fichier? Ou faut-il faire un encodage spécial?Byte [] Array to String

Le fichier est une image. En ce moment j'ai:

Byte[] fBuff = File.ReadAllBytes("C:/pic.jpeg"); 

Je dois prendre ce qui est dans fBuff et de sortie pour envoyer le long d'une demande de poste.

Répondre

7

Utilisez la méthode Convert.ToBase64String

Byte[] fBuff = File.ReadAllBytes("C:/pic.jpeg"); 
String base64 = Convert.ToBase64String(fBuff); 

De cette façon, la chaîne sera aussi compact que et est une sorte posible de la voie « standard » à l'écriture d'octets à chaîne et retour à octets.

Pour reconvertir en octets utiliser Convert.FromBase64String:

String base64 = ""; // get the string 
Byte[] fBuff = Convert.FromBase64String(base64); 
+0

Dans Fiddler, voici à quoi ressemble la chaîne. Votre méthode ferait-elle la même chose? Je ne suis pas sûr comment le serveur le décode, ou ce qu'il attend. (J'ai seulement coupé environ 2% des données de fiddler) '.) 10.) -, 3: J> 36F7, - @ WAFLNRSR2> ZaZP'JQRO 9, 3 ! 1 "AQaq # 2B 3 ? Ȉ Y } 3 \ $ X * i) xdQ p & ᮴r z T ! A B o چ OE g 1 q V MN ̻ @ 8 ѫlW ׵ . aw 3 S'2! W K5 $ d ~ 8 W ~ 9 s ꛡu- 5 = - j)) Ş $ w5 . ^GO] t} v Q –

+0

argh! Je ne savais pas que ça gâcherait ça, désolé –

0

Vous pouvez simplement créer une chaîne où chaque octet est un caractère de la chaîne. Si vous faites la même procédure opposée au récepteur, vous n'aurez aucun problème (j'ai fait quelque chose de similaire mais en Java).

+0

Cela peut ne pas fonctionner correctement si les données \ r \ n \ r \ n dans la séquence et Content-Length n'est pas spécifié dans le POST –

+0

Eh bien pour moi ça a marché, mais ce n'était pas exactement le même cas (et c'était en java). comme suggéré (mais rappelez-vous que le message est plus grand après l'encodage) – George

0

Convert.ToBase64String ressemble à votre meilleure option pour stocker les octets dans un tableau transmissible, vous devriez regarder dans ces fonctions.

0

Si vous envoyez simplement le fichier, vous pouvez utiliser la méthode UploadFile de la classe WebClient:

using (WebClient client = new WebClient) { 
    client.UploadFile("http://site.com/ThePage.aspx", @"C:\pic.jpeg"); 
} 

Cela poster le fichier en tant que téléchargement de fichier normal, comme à partir d'une page Web avec un fichier contribution. Sur le serveur de réception, le fichier provient de la collection Request.Files.

0

Une raison de ne pas utiliser le fichier de téléchargement WebClient?

+0

oui J'envoie les données en tant que demande de publication en plusieurs parties à un serveur sur lequel je n'ai aucun contrôle. J'utilise directement HTTPRequest pour envoyer les données car WebClient n'a aucun contrôle sur la façon dont les données sont envoyées. –