客户端:
Bitmap bbb = new Bitmap(pictureBox1.Image); System.IO.MemoryStream m = new System.IO.MemoryStream(); bbb.Save(m, System.Drawing.Imaging.ImageFormat.Gif); byte[] b = m.GetBuffer(); string base64string = Convert.ToBase64String(b); string postData = "UpData=" + MainID + "&Image1=" + base64string ; byte[] byteArray = Encoding.UTF8.GetBytes(postData); HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:51477/wxpform.aspx"); objWebRequest.Method = "POST"; objWebRequest.ContentType = "application/x-www-form-urlencoded"; objWebRequest.ContentLength = byteArray.Length; Stream newStream = objWebRequest.GetRequestStream(); // Send the data. newStream.Write(byteArray, 0, byteArray.Length); //写入参数 newStream.Close(); HttpWebResponse response = (HttpWebResponse)objWebRequest.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default); string textResponse = sr.ReadToEnd(); // 返回的数据
服务器端:
private static Bitmap Base64ToImg(string base64Code) { byte[] imageBytes = Convert.FromBase64String(base64Code); //读入MemoryStream对象 MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length); memoryStream.Write(imageBytes, 0, imageBytes.Length); //转成图片 Image image = Image.FromStream(memoryStream); return new Bitmap(image); }
aspx.cs
string MainID = Request.Form["UpData"]; string Image1 = Request.Form["Image1"];
WCF服务器商,网页引用了WCF,现在在WinForm中用网页POST,是因为这样子比使用安卓调试方便。
现在的错误,是在服务器端保存时,
Image image = Image.FromStream(memoryStream);
这一句提示参数错误。对比了一下,发现这个base64的字符长度不一样,估计是编码的问题,客户端有试过UTF-8,GB2312,ASCII,这三种都不行。
byte[] -> Base64 -> byte[] 这里和编码没有关系。
------------------------------------------------
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
这里是HTTP传输 string->byte[] ,服务器端能拿到MainID 和Image1 ,说明UTF8 没问题
------------------------------------------------------------------
可以先不测试图片,先用字符做调试。
比如字符串"test", 每个步骤的输出,应该是已知的。单步调试,看看哪个步骤出错了
"test" -> "dGVzdA==" -> "test"
先UTF-8 在base64
能说一下具体怎么弄的吗?图片先UTF-8,这个没有找到怎么转。
我现在试了一下,把图片转为base64,然后再显示到另一个图片控件上面,是正常的,应该是传输过程中的问题。
@侯唯: 图片可以先转data啊