`

C# 将图片转化为string用form表单提交,后台接受并存储

c# 
阅读更多
后台处理代码:
HttpRequest request = System.Web.HttpContext.Current.Request;

            string name = request.Form["name"].ToString();
            string pwd = request.Form["pwd"].ToString();
            string img = request.Form["img"].ToString();   //图片是先转byte数组,然后ToBase64String,最后在做UrlEncode

            string array = HttpUtility.UrlDecode(img);   //将数据转为未做UrlEncode时的串
            array = array.Replace(' ','+');      //将空格用+补齐
            byte[] old;
            try
            {
                old = Convert.FromBase64String(array);    //将ToBase64的串,还原为byte数组
            }
            catch(Exception e)
            {
                return ResponseResult.GenFaildResponse(e.Message);
            }
            CreateImageFromBytes("file1", old);              //调用方法保存在本地
            
            return ResponseResult.GenSuccessResponse(ResultCode.Success);



控制台发送数据
string url = "http://localhost:4806/WebApi/V1/Account/ChangeUserCard3";
            string userName = "123";
            string userPwd = "456";
            string jpegPath = "c:\\123456.png";

            //将图片转化为byte[]再转化为string
            string array = Convert.ToBase64String(ReadImageFile(jpegPath));
            string img = HttpUtility.UrlEncode(array);
            //构造post提交字段
            string para = "name="+userName + "&pwd=" + userPwd + "&img=" + img;

            #region HttpWebRequest写法
            HttpWebRequest httpWeb = (HttpWebRequest)WebRequest.Create(url);
            //httpWeb.Timeout = 20000;   //超时时间可以不设置
            httpWeb.Method = "POST";
            httpWeb.ContentType = "application/x-www-form-urlencoded";
            byte[] bytePara = Encoding.ASCII.GetBytes(para);
            using (Stream reqStream = httpWeb.GetRequestStream())
            {
                //提交数据
                reqStream.Write(bytePara, 0, para.Length);
            }
            //获取服务器返回值
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWeb.GetResponse();
            Stream stream = httpWebResponse.GetResponseStream();
            StreamReader streamReader = new StreamReader(stream, Encoding.GetEncoding("utf-8"));
            //获得返回值
            string result = streamReader.ReadToEnd();
            stream.Close();

            #endregion
            Console.WriteLine(result);
            Console.ReadKey();



服务端用到的两个子方法:
#region 将byte[]转为 Image对象
        /// <summary>
        /// 将byte[]转为 Image对象
        /// </summary>
        /// <param name="buffer">图片的byte数组</param>
        /// <returns></returns>
        public static Image BytesToImage(byte[] buffer)
        {
            MemoryStream ms = new MemoryStream(buffer);
            Image image = System.Drawing.Image.FromStream(ms);
            return image;
        }
        #endregion

        #region 将byte[] 转为图片并保存到本地
        /// <summary>
        /// 将byte[] 转为图片并保存到本地
        /// </summary>
        /// <param name="fileName">要保存的文件名(不带后缀)</param>
        /// <param name="buffer">二进制图片</param>
        /// <returns></returns>
        public static string CreateImageFromBytes(string fileName, byte[] buffer)
        {
            string file = fileName;
            Image image = BytesToImage(buffer);
            ImageFormat format = image.RawFormat;
            if (format.Equals(ImageFormat.Jpeg))
            {
                file += ".jpeg";
            }
            else if (format.Equals(ImageFormat.Png))
            {
                file += ".png";
            }
            else if (format.Equals(ImageFormat.Bmp))
            {
                file += ".bmp";
            }
            else if (format.Equals(ImageFormat.Gif))
            {
                file += ".gif";
            }
            else if (format.Equals(ImageFormat.Icon))
            {
                file += ".icon";
            }
            System.IO.FileInfo info = new System.IO.FileInfo(file);
            System.IO.Directory.CreateDirectory(info.Directory.FullName);
            File.WriteAllBytes(file, buffer);
            return file;
        }
        #endregion




备注:
转化和接收的原理:
1、在发送时将图片转成byte数组
2、将数组进行ToBase64String
3、最后在对串进行UrlEncode操作
4、将最后的参数以常用参数形式发送到服务端

5、服务端接收图片字符串后,先UrlDecode(处理后可能会有空格,如果有空格,需要用+做替换,否则base的时候会提示字符串格式不正确),再FromBase63String,最后再存到本地文件中
分享到:
评论

相关推荐

    C# post方式提交Form表单

    本篇文章将深入探讨如何在C#中通过POST方式提交Form表单,包括其原理、步骤和实际代码示例。 一、POST提交表单的基本原理 POST是HTTP协议中的一个方法,用于向服务器发送数据,特别是当数据量较大或者包含敏感信息...

    c#以POST方式模拟提交表单 - 真功夫

    ### C#以POST方式模拟提交表单 - 关键知识点解析 #### 一、知识点概览 本文档将基于“c#以POST方式模拟提交表单”这一主题进行深入解析,主要内容涉及C#语言如何实现HTTP POST请求来模拟提交表单数据,并通过具体的...

    C# Winform和网页表单交互(提交和获取)

    本主题将探讨如何在C# Winform应用程序中与网页表单进行交互,包括数据的提交和获取。 首先,Winform是.NET Framework提供的一种创建Windows桌面应用程序的方式。在Winform应用中,用户界面通常由各种控件(如按钮...

    .net 后台提交表单并返回结果

    在这个过程中,`a.aspx`页面作为客户端表单的发起者,通过POST或GET方法将数据提交到`b.aspx`页面进行处理,然后`b.aspx`根据接收到的数据进行业务逻辑操作,并可能返回相应的结果给用户。 1. **HTML表单(Form)**...

    c# Post提交图片

    根据给定的信息,本文将详细解释如何在C#中通过HTTP POST请求提交图片,并解析相关的代码片段。 ### C# Post提交图片 #### 一、基础知识介绍 在Web开发中,客户端经常会向服务器发送图片等多媒体文件。这通常通过...

    C#使用multipart/form-data示例

    1. **理解multipart/form-data**:`multipart/form-data`主要用于提交表单,特别是当表单中包含文件上传时。每个部分之间用分隔符(如`--Boundary`)进行区分,每个部分都有自己的Content-Type和可选的头部信息。 2...

    C#实现http文件上传图片提交PHP后台.zip

    在本文中,我们将深入探讨如何使用C#进行HTTP文件上传,特别是针对图片文件,并将其提交到PHP后台。这个过程在很多Web应用中都是常见的需求,例如用户上传头像或者在线文件分享。标题中的"最简单的实现方式"和描述中...

    C#.Net模拟表单提交(源码)

    以下是一个简单的示例,展示了如何使用C#模拟表单提交: ```csharp using System; using System.IO; using System.Net; public class Program { public static void Main() { string url = ...

    c#模拟post发送json和multipart/form-data格式

    在本主题中,我们将深入探讨如何使用C#来模拟POST请求,以便发送JSON和multipart/form-data格式的数据。这两种数据格式在现代网络应用中非常常见,特别是用于API交互和文件上传。 首先,让我们了解JSON(JavaScript...

    C#_post_multipartform示例.zip

    当用户在表单中选择文件并提交时,浏览器会将文件内容分割成多个部分,并为每个部分添加边界标识,以便服务器可以正确解析这些数据。每部分的数据都包含一个Content-Disposition头,用于指定字段名或文件名,以及...

    C# WinForm提交表单到网页,并且获取反馈数据

    在C# WinForm应用中,提交表单到网页并接收反馈数据是一项常见的任务,这通常涉及到网络编程和HTTP协议的理解...通过学习和实践这些知识点,你将能够熟练地在C# WinForm应用中实现向网页提交表单并获取反馈数据的功能。

    c#提交表单生成XML

    本主题聚焦于“C#提交表单生成XML”,这是一个关于数据交互和存储的常见任务,涉及到网络请求、HTML解析、XML处理以及数据库操作等多个知识点。 首先,让我们详细讨论如何在C#中提交表单。在Web开发中,表单提交...

    c#下post multipart/form-data和JSON

    1. 序列化对象为JSON:首先,定义一个C#对象,然后使用Json.NET的`JsonConvert.SerializeObject`方法将其转换为JSON字符串。 ```csharp public class MyData { public string Field1 { get; set; } public int ...

    C# 以Post方式提交数据

    在IT领域,特别是Web开发中,使用C#通过POST方式提交数据是一项常见且重要的技能。以下将详细解析如何使用C#实现POST请求,包括构造请求、设置参数、发送数据及处理响应。 ### C# POST请求的基本流程 1. **创建...

    C# post模拟提交接收图片存到服务器上

    在C#编程中,模拟POST提交通常用于模拟用户在网页上的表单提交行为,例如上传文件,特别是图片。这个过程涉及到HTTP协议的理解、文件流处理以及服务器端的存储逻辑。以下将详细介绍如何实现这个功能。 首先,理解...

    c#post multipart/form-data和JSON数据

    本篇文章将详细探讨如何在C#中处理`multipart/form-data`和JSON格式的数据。 `multipart/form-data`是HTTP协议中一种用于上传文件或发送复杂数据(如带有文件的表单数据)的Content-Type。在C#中,我们可以使用...

    MVC四种表单提交

    #### 二、传统Form表单Action属性提交 传统的HTML表单提交方式是通过`&lt;form&gt;`标签的`action`属性指定服务器端处理表单数据的URL路径。 **示例**: ```html &lt;form action="/Star/Apply" method="post"&gt; &lt;!-- 表单...

    C# 使用Get和Post请求获取数据

    当使用GET或POST请求获取到JSON数据后,我们可以用`DeserializeFromJson`方法将其转换为对应的C#对象,便于进一步处理。 综上所述,C#通过`HttpClient`类提供的方法可以方便地执行GET和POST请求,获取Web服务的数据...

    C#一个简单的图片上传例题

    在C#编程中,图片上传是一项常见的功能,广泛应用于各种Web应用中,如社交媒体、博客系统、电商网站等。这个“C#一个简单的图片上传例题”旨在介绍如何在C#环境中实现用户友好的图片上传功能。下面我们将深入探讨...

Global site tag (gtag.js) - Google Analytics