WebApi接口接收Base64图片

方法一:

复制代码
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.Serialization.Formatters.Binary;
using System.Web;
using System.Web.Http;

namespace WebApi.Controllers
{
    public class HomeController : ApiController
    {
        /// <summary>
        /// 接收Base64编码格式的图片
        /// </summary>
        public void Upload()
        {
            //获取base64编码的图片
            HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];
            string text = context.Request.Form["file"];

            //获取文件储存路径
            string path = context.Request.MapPath("~/"); //获取当前项目所在目录
            string datetime = GetTimeStamp();
            string suffix = ".jpg"; //文件的后缀名根据实际情况
            string strPath = path + "App_Data/" + datetime + suffix;
            
            //获取图片并保存
            Base64ToImg(text.Split(‘,‘)[1]).Save(strPath);
        }

        //解析base64编码获取图片
        private Bitmap Base64ToImg(string base64Code)
        {
            MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64Code));
            return new Bitmap(stream);
        }

        //获取当前时间段额时间戳
        public string GetTimeStamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalMilliseconds).ToString();
        } 
    }
}
复制代码

 

方法二:

该方法我正在用,删减了一些业务上的操作,有一些类的引用需要自己删掉或者写一下,保存图片的方法放在方法类中,不要放在Api控制器中

复制代码
using IServices;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Core.Dto;
using Core.Orm.SqlSugar;
using Utils.Configs;
using System;
using System.Net;
using System.Net.Sockets;

namespace Api.Controllers
{
    /// <summary>
    /// 图片接口
    /// </summary>
    [Route("api/[controller]/[action]")]
    [EnableCors("any")]
    [AllowAnonymous]
    public class ImageController : ControllerBase
    {
        private readonly IQalCJServices _qalCJServices;
        private readonly IQalCJImageServices _qalCJImageServices;
        /// <summary>
        /// 依赖注入 
        /// </summary>
        public ImageController(IQalCJServices qalCJServices, IQalCJImageServices qalCJImageServices)
        {
            _qalCJServices = qalCJServices;
            _qalCJImageServices = qalCJImageServices;
        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public IActionResult UpdateImage()
        {
            //接收图片Base64编码
            string Image = Request.Form["Image"].ToString();
            var date = DateTime.Now;
            string msg = string.Empty;
            string ImagePath;

            try
            {
                //图片路径
                string ImageUrl = string.Format(ImagePathConfig + @"fgsb\{0}\{1}\{2}\", date.ToString("yyyy"), date.ToString("MM"), date.ToString("dd"));

                //解析图片,保存图片
                Base64StringToImage(Image, ImageUrl);
            }
            catch (Exception ex)
            {
                msg = ex.Message;
            }

            return new JsonResult(new
            {
                code = string.IsNullOrEmpty(msg) ? 1 : 100,
                msg = string.IsNullOrEmpty(msg) ? "成功" : msg
            });
        }

        /// <summary>
        /// base64编码的文本 转为 图片
        /// </summary>
        /// <param name="Image"></param>
        public void Base64StringToImage(string Image, string FilePath)
        {
            ImagePath = string.Empty;

            try
            {
                byte[] arr = Convert.FromBase64String(Image);
                MemoryStream ms = new MemoryStream(arr);
                Bitmap bmp = new Bitmap(ms);

                //检查保存目录
                if (!Directory.Exists(FilePath))
                {
                    Directory.CreateDirectory(FilePath);
                }

                //图片名称
                string ImageName = DateTime.Now.ToString("yyyyMMddHHmmss");

                if (!string.IsNullOrEmpty(SteelGalleryCode))
                {
                    ImageName = ImageName + '-' + SteelGalleryCode;
                }

                ImagePath = FilePath + ImageName + ".jpg";

                //保存图片
                bmp.Save(ImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                //bmp.Save(txtFileName + ".bmp", ImageFormat.Bmp);
                //bmp.Save(txtFileName + ".gif", ImageFormat.Gif);
                //bmp.Save(txtFileName + ".png", ImageFormat.Png);
                ms.Close();
            }
            catch (Exception ex)
            {
                //MessageBox.Show("Base64StringToImage 转换失败\nException:" + ex.Message);
            }
        }
    }
}    
复制代码

 

posted @   Core、陈  阅读(1314)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示