码迷,mamicode.com
首页 > Windows程序 > 详细

记录一个简单webapi 上传图片

时间:2019-05-08 16:06:04      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:data   event   ber   name   returns   客户   简单的   test   post   

图片转base64字符串,到接口后,再转回保存.代码里面是转成byte[]之后转的,也可以用base64字符串直接转图片.

只想记录一下简单的流程。

1,服务端

保存图片业务代码:

 public class UpLoadFile
    {
        public string UpLoad(string fileName,string filePath,byte[] fileData)
        {
            Bitmap map =BitmapFromBytes(fileData);
            filePath = System.Web.Hosting.HostingEnvironment.MapPath(@"~/") +"images\\" + fileName;
            map.Save(filePath, ImageFormat.Jpeg);
            return filePath;
        }
        /// <summary>
        /// byte[]数组转换为Bitmap
        /// </summary>
        /// <param name="bytes">byte[]数组</param>
        /// <returns></returns>
        public static Bitmap BitmapFromBytes(byte[] bytes)
        {
            Bitmap bitmap = null;
            try
            {
                using (MemoryStream stream = new MemoryStream(bytes))
                {
                    bitmap = new Bitmap((Image)new Bitmap(stream));
                }
            }
            catch { }
            return bitmap;
        }
    }
控制器代码:
在这里使用dynamic的时候犯了一个错,特别指出,使用过这个Convert.FromBase64String(fileInfo.fileData),这是不对的,fileInfo.fileData并不是string,写成这样就是自己思想固化的直接体现。。。
 public class UpLoadController : ApiController
    {
        [HttpPost]
        public string UpLoadFile(dynamic fileInfo)
        {
            string fileName = fileInfo.fileName;
            string filePath = string.Empty;
            string fileData1 = fileInfo.fileData;
            byte[] fileData = Convert.FromBase64String(fileData1);
            BLL.UpLoadFile upLoad = new BLL.UpLoadFile();
            return upLoad.UpLoad(fileName, filePath, fileData);
        }
        [HttpPost]
        public string Test()
        {
            return "123";
        }
    }
2,客户端代码,winfrom
调用接口
 private async void button3_Click(object sender, EventArgs e)
        {
            //创建一个处理序列化的DataContractJsonSerializer
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(FileInfo));
            MemoryStream ms = new MemoryStream();
            FileInfo fileInfo = new FileInfo()
            {
                fileName = "123.jpeg",
                fileData =Convert.ToBase64String( GetImage())
            };
            //将资料写入MemoryStream
            serializer.WriteObject(ms, fileInfo);
            //一定要在这设定Position
            ms.Position = 0;
            HttpContent content = new StreamContent(ms);//将MemoryStream转成HttpContent
            content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
           
            HttpClient client = new HttpClient();
            HttpResponseMessage response =  client.PostAsync("http://localhost:803/api/UpLoad/UpLoadFile" , content).Result;
          
            if (response.IsSuccessStatusCode)
            {
                string ret = response.Content.ReadAsStringAsync().Result;
                string json = JsonConvert.DeserializeObject(ret).ToString();
                MessageBox.Show("成功 :"+json);
            }
        }
实体类
 [DataContract]
    public  class FileInfo
    {
        [DataMember]
        public string fileName
        {
            get;
            set;
        }
        [DataMember]
        public string fileData
        {
            get;
            set;
        }
    }

记录一个简单webapi 上传图片

标签:data   event   ber   name   returns   客户   简单的   test   post   

原文地址:https://www.cnblogs.com/siyunsanqu/p/10832325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!