2010-02-21 4 views
2

Я хочу вывести массив Byte [] в строку, чтобы я мог отправить его по HTTPRequest. Это можно сделать? И сервер возьмет данные и создаст из него файл? Или нужно сделать некоторую специальную кодировку?Byte [] Array to String

Файл - это изображение. На данный момент у меня есть:

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

Мне нужно принять то, что в fBuff и выводить его для отправки по запросу пост.

ответ

7

Использование командной Convert.ToBase64String методы

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

Таким образом, строка будет как компактной, как и является Возможным родом «стандарт» способ записи байт в строку и обратно в байты.

Чтобы преобразовать обратно в байт использовать Convert.FromBase64String:

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

В Fiddler это то, что выглядит строка. Будет ли ваш метод делать то же самое? Я не уверен, как сервер его декодирует или что он ожидает. (Я только сократил около 2% данных от скрипача) '.) 10.) -, 3: J> 36F7, - @ WAFLNRSR2> ZaZP'JQRO 9, 3! 1" AQaq # 2B3? Ȉ Y } 3 \ $ X * i) xdQ р & ᮴rzT! ABO چ OEg1qVMN ̻ @ 8 ѫlW ׵ . aw 3 S' 2! W K5 $ d ~ 8 W ~ 9 s ꛡu- 5 = - j)) Ş $ w5 . ^GO] t} v Q –

+0

argh! Не знал, что это испортится, извините. –

0

Вы можете просто создать строку, где каждый байт является символом строки. Если вы сделаете ту же самую противоположную процедуру у получателя, у вас не будет никаких проблем (я сделал что-то подобное, но на Java).

+0

Это может не сработать, если данные \ r \ n \ r \ n в последовательности, а Content-Length не указана в POST. –

+0

Ну, для меня это сработало, но это был не совсем тот же случай (и он был в java). Может быть, лучше использовать Base64 как было предложено (но помните, что сообщение больше после кодировки). – George

0

Convert.ToBase64String выглядит как ваш лучший вариант для хранения байтов в передаваемом массиве, вы должны изучить эти функции.

0

Если вы отправляете только файл, вы можете использовать UploadFile метод WebClient класса:

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

Это разместим файл как обычный файл загрузки, так же, как с веб-страницы с файлом вход. На принимающем сервере файл входит в коллекцию Request.Files.

0

Любые причины не использования файла загрузки WebClient?

+0

да. Я отправляю данные в виде многостраничного почтового запроса на сервер, на который у меня нет контроля. Я напрямую использую HTTPRequest для отправки данных, поскольку WebClient не имеет такого контроля над отправкой данных. –