winform里面添加控制器访问

在一个winform 程序里面添加一个控制器,实现图片上传功能

1  使用到的程序集集合

 

2   实现过程

a  新建一个类 Startup

   public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
       {

           System.Web.Http.HttpConfiguration config = new System.Web.Http.HttpConfiguration();
           config.Routes.MapHttpRoute(
               name: "DefaultApi",
               routeTemplate: "{controller}/{id}",
               defaults: new { id = RouteParameter.Optional }
           );




           //静态文件托管
           appBuilder.Map("/images", map =>
           {
               // Configure Web API for self-host. API
               // 允许跨域
               //map.UseCors(CorsOptions.AllowAll);
               map.UseStaticFile(new StaticFileMiddlewareOptions
               {
                   RootDirectory = @".\images",
                   DefaultFile = "index.html",
                   EnableETag = true,
                   EnableHtml5LocationMode = true,
                   MimeTypeProvider = new MimeTypeProvider(new Dictionary<string, string>
                    {
                        { ".html", "text/html" },
                        { ".htm", "text/html" },
                        { ".dtd", "text/xml" },
                        { ".xml", "text/xml" },
                        { ".ico", "image/x-icon" },
                        { ".css", "text/css" },
                        { ".js", "application/javascript" },
                        { ".json", "application/json" },
                        { ".jpg", "image/jpeg" },
                        { ".png", "image/png" },
                        { ".gif", "image/gif" },
                        { ".config", "text/xml" },
                        { ".woff2", "application/font-woff2"},
                        { ".eot", "application/vnd.ms-fontobject" },
                        { ".svg", "image/svg+xml" },
                        { ".woff", "font/x-woff" },
                        { ".txt", "text/plain" },
                        { ".map", "text/plain" }
                    })
               });
           });
           appBuilder.UseWebApi(config);
       } 
    }

  2  新建一个类  启动web服务类 C_WebServer

 public static void StartWeb(string url)
 {
     // string baseAddress = "http://192.168.2.157:9000/";

     var startOpts = new StartOptions(url);
     //如果绑定的是ip地址,请使用管理员运行,否则会出错
     WebApp.Start<Startup>(startOpts);
 
 }

  3 新建控制器就好了

    /// <summary>
    /// 文件上传
    /// </summary>
    /// <param name="pic"></param>
    public class FileUploadController : ApiController//ApiController
    {


        [HttpGet]
        public string Test()
        {
            return "test";
        }

        /// <summary>
        /// 上次图片
        /// </summary>
        /// <param name="pic"></param>
        //[HttpPost]   IHttpActionResult
        [HttpPost]
        public void Upload()
        {
            C_LogManager.ErrorLog("到这里来了----");
            try
            {
                string m_DesSignature = "";
                var sp = new MultipartMemoryStreamProvider();
                string path = "";
                string name = "";
                string url = "";
                string extRemak = "";
                int fileLength = 0;
                int operType = 0;
                string fid="";

                bool isSingTrue = false;
                Task.Run(async () => await Request.Content.ReadAsMultipartAsync(sp)).Wait();

                System.Collections.ObjectModel.Collection<HttpContent> list = sp.Contents;

                foreach (HttpContent item in list)
                {
                    if (item.Headers.ContentDisposition.FileName != null)
                    {
                       

                        // 获取文件的后缀,方便给文件重命名
                        var filename = item.Headers.ContentDisposition.FileName.Replace("\"", "");
                        string exttend = Path.GetExtension(filename);
                      //  name = Guid.NewGuid().ToString("N") + exttend;

                        C_LogManager.ErrorLog("扩展名:"+exttend);
                        name = Guid.NewGuid().ToString("N") + ".png";
                        url = "/images/" + DateTime.Now.ToString("yyyy-MM-dd") + "/" + name;
                        extRemak = url;
                        // 验证后缀{ ".jpg", ".gif", ".bmp",".png" }; 未验证
                        path = Environment.CurrentDirectory + url; // 这里用的是winfom 做静态文件服务,如果用web做的时候用Server.MapPath(),获取服务器地址
                        // 上级目录是否存在
                        DirectoryInfo iDinfo = Directory.GetParent(path);
                        if (iDinfo.Exists == false)
                        {
                            iDinfo.Create();
                        }
                        url = C_PBSConfigManager.FileUploadURL + url;
                       
                        var ms = item.ReadAsStreamAsync().Result;
                        using (var br = new BinaryReader(ms))
                        {
                            var data = br.ReadBytes((int)ms.Length);
                            fileLength =(int) ms.Length;
                            File.WriteAllBytes(path, data);

                          //  C_LogManager.ErrorLog("保存图片成功=="+url );
                        }
                    }
                    else
                    {

                        if (item.Headers.ContentDisposition.Name.Replace("\"", "") == @"signature")//签名
                        {
                            m_DesSignature = item.ReadAsStringAsync().Result;
                            m_DesSignature = C_DESHelper.Decrypt(m_DesSignature);
                            if (m_DesSignature.Length > 0)
                            {

                                string[] arr = m_DesSignature.Split(new char[] { '&' });
                                operType = int.Parse(arr[2]);
                                fid = arr[1];
                                DateTime dt = DateTime.Parse(arr[0]);
                                if (dt.AddMinutes(2) < DateTime.Now)
                                {
                                    C_LogManager.ErrorLog("当前时间==" + DateTime.Now + "过期时间=" + dt);
                                    //return Json(new { status = 500 });
                                    break;
                                }
                                isSingTrue = true;
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
                } 
                #endregion
            }
            catch (Exception ex)
            {
                C_LogManager.ErrorLog("上传图片出现异常" +ex.ToString()+ DateTime.Now );
             
            }
           
        }

    }

 

posted @ 2024-09-09 12:02  陌念  阅读(14)  评论(0)    收藏  举报