2010-02-21 82 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