2010-02-21 85 views
2

我想輸出一個Byte []數組到一個字符串,所以我可以沿着HTTPRequest發送它。可以做到嗎?服務器會拿起數據並從中創建一個文件?還是需要做一些特殊的編碼?字節[]數組到字符串

該文件是一個圖像。目前我有:

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

我需要採取什麼在fBuff和輸出它發送一個post請求。

回答

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%的來自fiddler的數據) '。)10。) - ,3:J> 36F7, - @ WAFLNRSR2>ZaZP'JQRO 9, 3!1" AQaq#2B3?Ȉ Y } 3\ $ X * i) xdQ p&᮴rzT!ABOچOEg1qVMN ̻@8 ѫlW ׵ . aw 3 S' 2!W K5$ d〜 8 W〜 9 s ꛡu- 5= - j )) Ş$ w5 .^GO] t}v Q – 2010-02-21 00:20:35

+0

唉!不知道它會搞砸的那樣,對不起。 – 2010-02-21 00:21:05

0

你可以只創建一個字符串,其中每個字節是字符串的字符。如果您在接收器上執行相同的相反過程,則不會有任何問題(我已經做了類似的事情,但使用Java)。

+0

如果數據存在,這可能無法正常工作\ r \ n \ r \ n並且在POST中沒有指定Content-Length。 – 2010-02-21 00:51:05

+0

對我來說它工作正常,但並不完全一樣(也是在java中)也許只是更好地使用Base64按照建議(但是記住編碼後的信息更大) – George 2010-02-21 10:13:20

0

Convert.ToBase64String看起來像是將字節存儲在可傳輸數組中的最佳選擇,您應該查看這些函數。

0

如果您只發送文件,你可以使用WebClient類的UploadFile方法:

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

這將發佈文件作爲普通文件上傳,就像從文件的Web頁面輸入。在接收服務器上,該文件出現在Request.Files集合中。

0

任何不使用WebClient上傳文件的原因?

+0

是的,我將數據作爲多部分發送請求發送給我無法控制的服務器。我直接使用HTTPRequest來發送數據,因爲WebClient對數據的發送方式沒有這種控制。 – 2010-02-21 01:15:11