首页 新闻 会员 周边 捐助

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

0
悬赏园豆:50 [已解决问题] 解决于 2019-01-03 22:22

客户端:

 

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

顺易的主页 顺易 | 菜鸟二级 | 园豆:225
提问于:2017-08-01 14:35
< >
分享
最佳答案
0

byte[] -> Base64 -> byte[]  这里和编码没有关系。

------------------------------------------------

byte[] byteArray = Encoding.UTF8.GetBytes(postData);

这里是HTTP传输 string->byte[] ,服务器端能拿到MainID 和Image1 ,说明UTF8 没问题

------------------------------------------------------------------

可以先不测试图片,先用字符做调试。

比如字符串"test", 每个步骤的输出,应该是已知的。单步调试,看看哪个步骤出错了

"test"    ->  "dGVzdA=="  -> "test"

收获园豆:30
刀是什么样的刀 | 小虾三级 |园豆:910 | 2017-08-12 10:57
其他回答(1)
0

先UTF-8 在base64

收获园豆:20
青语 | 园豆:1000 (小虾三级) | 2017-08-01 15:01

能说一下具体怎么弄的吗?图片先UTF-8,这个没有找到怎么转。

我现在试了一下,把图片转为base64,然后再显示到另一个图片控件上面,是正常的,应该是传输过程中的问题。

支持(0) 反对(0) 顺易 | 园豆:225 (菜鸟二级) | 2017-08-01 15:20

@侯唯: 图片可以先转data啊

支持(0) 反对(0) 青语 | 园豆:1000 (小虾三级) | 2017-08-01 15:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册