> 信息中心 >

字符编码原因,造成WinForm以Post方式上传图片后服务器不能保存

来源:互联网 编辑:从小磊

有网友碰到过这样的问题:字符编码原因,造成WinForm以Post方式上传图片后服务器不能保存,问题详细内容为:

客户端:

 

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); returnnew 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,这三种都不行。

字符编码 aspx.net ,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
byte[] -> Base64 -> byte[]  这里和编码没有关系。 ------------------------------------------------ byte[] byteArray = Encoding.UTF8.GetBytes(postData); 这里是HTTP传输 string->byte[] ,服务器端能拿到MainID 和Image1 ,说明UTF8 没问题 ------------------------------------------------------------------ 可以先不测试图片,先用字符做调试。 比如字符串"test", 每个步骤的输出,应该是已知的。单步调试,看看哪个步骤出错了 "test"    ->  "dGVzdA=="  -> "test" 收获园豆:30
解决方案2:
先UTF-8 在base64 收获园豆:20

C#(WinForm)上传图片到服务器

答:我这里有一个简单上传的 神马都可以,回头压缩发给你 这个是一个完整的例子,亲测可用.

C# winform http协议 如何向服务器端发送消息?使...

答:byte[] byteArray=System.Text.Encoding.Default.GetByte("要发送的post数据");//编码Post数据,编码根据自己需求定,Default为默认编码 WebRequest request=HttpWebRequest.Create //创建请求 request.Method = "POST"; request.ContentLength ...

C# winform中 post方式上传附件后得到文件名

答:你应该试图先用正常方式上传看看文件名是啥。。 用成站测试的话你能进行调试么- - Asp.net的话是在Request.Files里获得文件.. 织梦貌似是php的么。


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/u/kiccd.html report 1256 解决方案1:byte[] -> Base64 -> byte[]  这里和编码没有关系。------------------------------------------------byte[] byteArray = Encoding.UTF8.GetBytes(postData);这里是HTTP传输 string->byte[] ,服务器端能拿到MainID 和Image1 ,说明UTF8 没问题--------------------------------

热门图片