#if !Nancy using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using System.Text; using System.Web; using System.Web.Http; using 电子展板.Base; using 电子展板.Models; using 电子展板.Utility; using 电子展板.Utility.Core; using 电子展板.Utility.Other; using 电子展板.Utility.Web; using static System.Net.Mime.MediaTypeNames; namespace 电子展板.WebModule { public class IndexController : ApiController { /// 主界面 /// /// [HttpGet, Route(""), Route("index.html")] public ActionResult Index() { return Resouce("/Views/Index.html", "text/html"); } /// /// 获得配置信息 /// /// [HttpGet, Route("getConfig")] public ActionResult GetConfig() { return Json(GlobalVariable.Config); } /// /// 上传图片。 /// /// [HttpPost, Route("uploadImage")] public ActionResult UploadImage() { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string tempPath = Path.GetTempPath(); var provider = new WithExtensionMultipartFormDataStreamProvider(tempPath, UUID.StrSnowId); var fileData = Request.Content.ReadAsMultipartAsync(provider).Result; if (fileData.FileData.Count == 0) { return Error(); } var file = fileData.FileData[0]; byte[] data = null; using (ByteArrayStream byteArrayStream = new ByteArrayStream()) { using (var stream = System.IO.File.OpenRead(file.LocalFileName)) { stream.CopyTo(byteArrayStream); } System.IO.File.Delete(file.LocalFileName); data = byteArrayStream.ToByteArray(); } string filename = Path.GetFileName(file.LocalFileName); GlobalVariable.Config.FileUploadList.Add(new UploadFiles { Name = filename, Bin = data }); GlobalVariable.SaveConfig(); string virtualPath = "/upload/" + filename; return Success("上传成功", virtualPath); } /// /// 图形显示 /// /// /// [HttpGet, Route("upload/{id}")] public ActionResult GetUploadFile([FromUri] string id) { string contentType = System.Web.MimeMapping.GetMimeMapping(id); UploadFiles uploadFiles = GlobalVariable.Config.FileUploadList.FirstOrDefault(x => x.Name == id); if (uploadFiles == null) return null; return File(uploadFiles.Bin, id, contentType); } /// /// 保存配置文件 /// /// /// [HttpPost, Route("save")] public ActionResult Save([FromBody] MyConfig config) { //保存 PropertyInfo[] propertyInfos = typeof(MyConfig).GetProperties(); foreach (PropertyInfo propertyInfo in propertyInfos) { if (propertyInfo.Name == "FileUploadList") { continue; } object value = propertyInfo.GetValue(config); propertyInfo.SetValue(GlobalVariable.Config, value); } GlobalVariable.SaveConfig(); //保存并修改界面 EventBus.Instance.Publish("save", ""); return Success(); } private ActionResult File(byte[] bytes, string name, string contentType) { ActionResult response = new ActionResult(HttpStatusCode.OK); response.Content = new StreamContent(new MemoryStream(bytes)); response.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType); response.Content.Headers.ContentLength = bytes.Length; response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = HttpUtility.UrlEncode(name) }; response.Headers.Add("Access-Control-Expose-Headers", "FileName"); response.Headers.Add("FileName", HttpUtility.UrlEncode(name)); return response; } private ActionResult Json(object obj) { return new ActionResult { Content = new StringContent(obj.ToJson(), Encoding.UTF8, "application/json") }; } public ActionResult Resouce(string viewName, string contentType) { string packUri = $"pack://application:,,,/Assets{viewName}"; byte[] bytes = null; using (Stream stream = System.Windows.Application.GetResourceStream(new Uri(packUri, UriKind.RelativeOrAbsolute)).Stream) { bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); } ActionResult response = new ActionResult(HttpStatusCode.OK); response.Content = new ByteArrayContent(bytes); response.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType); response.Content.Headers.ContentLength = bytes.Length; return response; } protected ActionResult Success(string message = "恭喜您,操作成功。", object data = null) { return Json(new { state = 1, message, data }); } protected ActionResult Error(string message = "对不起,操作失败。", object data = null) { return Json(new { state = 2, message, data }); } } public class ActionResult : System.Net.Http.HttpResponseMessage { public ActionResult() : base(HttpStatusCode.OK) { } public ActionResult(HttpStatusCode statusCode) : base(statusCode) { } } } #endif