记录一个简单webapi 上传图片

图片转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;
        }
    }

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

时间: 2024-08-26 00:35:37

记录一个简单webapi 上传图片的相关文章

[PCB制作] 1、记录一个简单的电路板的制作过程——四线二项步进电机驱动模块(L6219)

前言 现在,很多人手上都有一两个电子设备,但是却很少有人清楚其中比较关键的部分(PCB电路板)是如何制作出来的.我虽然懂点硬件,但是之前设计的简单系统都是自己在万能板上用导线自己焊接的(如下图左),复杂的都是模块拼接的(如下图右):      工作中原理图和PCB也有专门的工程师来制作,因此我对这一块了解比较少.而最近闲来无事,又因为手头上确实少一个四线二项步进电机驱动模块.起初是在淘宝上找了很久才找到一个适合的,结果实验了一下午还是不行:又考虑自己在万能板上焊接,可是发现该模块外围需要10个左

记录一个简单的HttpClient抓取页面内容

现如今的网络时代,HTTP协议如此重要,随着java的发展,也越来越多的人采用java直接通过HTTP协议访问网络资源,虽然java.net提供了基本的访问HTTP协议的基本功能,但是对于大部分应用程序来说,仍旧还有许多功能不能够灵活使用:HttpClient是Apache Jakarta Common 下的子项目,一个提供访问HTTP协议的java工具包,提供了更多.更快捷.丰富的方法,HttpClient主要常用的功能有:实现了所有 HTTP 的方法(GET,POST,PUT,HEAD,DE

记录一个简单的dbcp数据连接池

这个示例用到了ThreadLocal与dbcp,我觉得有点意思,就整理了下.使用dbcp,肯定要导入commons-dbcp.jar包.下面直接贴DBUtil代码: public class DBUtil { private static DataSource ds; //定义一个数据连接池 //threadLocal是线程的局部变量,它的实例通常是类中的 private static 字段 private static ThreadLocal<Connection> connLocal=ne

记录一个简单的vue页面实现

<template> <div class="userView"> <!-- 页眉颜色统一 --> <div class="buttonTop"></div> <div class="main"> <!--工具栏--> <div class="center" style="overflow: hidden;">

一个简单的makefile模板

在Linux下编译工程,makefile是必不可少的工具,下面记录一个简单的makefile模板. 多个文件目录下的makefile写法推荐参考博文:http://www.cnblogs.com/Anker/p/3242207.html DIR_SRC = ./ DIR_BIN = ../bin PROGRAMNAME = program TARGET = ${DIR_BIN}/${PROGRAMNAME} SRC = $(wildcard ${DIR_SRC}/*.cpp) CC = g++

Net WebApi一个简单的Token验证

1.前言 WebAPI主要开放数据给手机APP,Pad,其他需要得知数据的系统,或者软件应用.Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能.我上次写的<Asp.Net MVC WebAPI的创建与前台Jquery ajax后台HttpClient调用详解>这种跟明显安全性不是那么好,于是乎这个就来了 ,用户需要访问的API都必须带有票据过来,说白了就是登陆之后含有用户信息的Token.开始撸... 2.新建一个WebApi项目 在App_Start文件夹下面新建一个Base

kindeditor扩展粘贴图片功能&amp;修改图片上传路径并通过webapi上传图片到图片服务器

前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功能 kindeditor修改图片上传路径并通过webapi上传图片到图片服务器(支持分布式图片) 结果演示 1.扩展粘贴图片功能演示 2.修改图片上传路径演示: 我们的网站演示地址是:http://localhost:9393/ 我们的图片服务器地址是:http://localhost:9394/

【jQuery插件分享】Cropper——一个简单方便的图片裁剪插件

原文:https://segmentfault.com/a/1190000012344970 插件介绍 这是一个我在写以前的项目的途中发现的一个国人写的jQuery图像裁剪插件,当时想实现用户资料的头像上传功能,并且能够预览图片,和对图片进行简单的裁剪.旋转,花了不少时间才看到了这个插件,感觉功能挺全面,代码实现起来也挺简单,再加上用的是Bootstrap,对移动端操作也有适配,于是就用了.现在稍微有点时间就记录一下,方便以后再用的时候查阅.另外也有对应的js版本. 官方文档(英文) jQuer

Hyperledger Fabric 建立一个简单网络

p { margin-bottom: 0.25cm; line-height: 120% } Building you first network 网络结构: 2个Orgnizations(每个Org包含2个peer节点)+1个solo ordering service 打开fabric-sample下的示例first-network p { margin-bottom: 0.25cm; line-height: 120% } 其中byfn.sh为启动这个网络的启动脚本,启动脚本中除建立一个包含