使用.NET通过HTTP发送base64编码的字符串

时间:2010-08-20 10:01:12

标签: .net http base64 transmission

好的,问题是我正在尝试通过HTTP编码为base64来发送字节数组。虽然我在另一端接收的字符串与原始字符串的大小相同,但字符串本身并不相同,因此我无法将字符串解码回原始字节数组。

另外,在发送字符串之前,我已经完成了对客户端base64的转换,一切正常。它发送后发生问题。

有什么我想念的吗?任何特定的格式类型?我尝试过使用EscapeData(),但是字符串太大了。

提前谢谢

编辑:代码

System.Net.WebRequest rq = System.Net.WebRequest.Create("http://localhost:53399/TestSite/Default.aspx");
rq.Method = "POST";
rq.ContentType = "application/x-www-form-urlencoded";
string request = string.Empty;
string image =             Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\\temp.png"));            
request += "image=" + image;
int length = image.Length;
byte[] array = new UTF8Encoding().GetBytes(request);
rq.ContentLength = request.Length;
System.IO.Stream str = rq.GetRequestStream();                        
str.Write(array, 0, array.Length);            
System.Net.WebResponse rs = rq.GetResponse();
System.IO.StreamReader reader = new System.IO.StreamReader(rs.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
str.Close();            
System.IO.File.WriteAllText("c:\\temp\\response.txt", response);

2 个答案:

答案 0 :(得分:5)

下面的第二行是问题。

string image = Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\temp.png"));
request += "image=" + image;

如果查看Base 64 index table,最后两个字符(+和/)不是URL安全的。因此,当您将其附加到请求时,您必须URL对图像进行编码。

我不是.net家伙,但第二行应该写成类似的东西

string image = Convert.ToBase64String(System.IO.File.ReadAllBytes("c:\temp.png"));
request += "image=" + URLEncode(image);

服务器端无需更改。只需找出系统调用的URL URL编码一段字符串。

答案 1 :(得分:0)

我会建议尝试两件事

  1. 在内容类型中包含字符集,因为您依赖于UTF8 -

    rq.ContentType =“application / x-www-form-urlencoded; charset = utf-8”

  2. 在使用StreamReader读取请求流时,使用StreamWriter写入请求流。