Files
EBoard/电子展板/WebModule/HomeModule.cs

166 lines
5.8 KiB
C#

using Nancy;
using Nancy.ModelBinding;
using Nancy.Swagger;
using Nancy.Swagger.Annotations.Attributes;
using Swagger.ObjectModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using .Base;
using .Models;
using .Utility;
using .Utility.Core;
using .Utility.Extension;
using .Utility.Logs;
using .Utility.Other;
namespace .WebModule
{
public class HomeModule : NancyModule
{
public HomeModule(ISwaggerModelCatalog modelCatalog)
{
//涉及到哪些Model
modelCatalog.AddModel<MyConfig>();
modelCatalog.AddModel<RetValue<string>>();
//默认页面
Get("", _ => Index());
Get("/", _ => Index());
Get("/index.html", _ => Index());
//全局静态资源
Get("/static/{name*}", dynamic => StaticResource(dynamic.name ?? ""));
//获得配置
Get("/getConfig", _ => GetConfig(), null, "getConfig");
//获得上传的文件
Get("/upload/{id}", dynamic => GetUploadFiles(dynamic.id ?? ""));
//上传图片
Post("/uploadImage", dynamic =>
{
IEnumerable<HttpFile> files = Request.Files;
if (files == null || files.Count() == 0)
return UploadImage(null);
return UploadImage(files.FirstOrDefault());
}, null, "uploadImage");
//保存配置
Post("/save", dynamic =>
{
MyConfig config = this.Bind<MyConfig>();
return SaveConfig(config);
}, null, "save");
}
/// <summary>
/// 默认页面
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object Index()
{
return Resouce("Views/Index.html");
}
/// <summary>
/// 全局静态资源
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object StaticResource(string name)
{
return Resouce(name);
}
/// <summary>
/// 获得配置
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
[Route("getConfig")]//Name
[Route(HttpMethod.Get, "/getConfig")]//Method And Path
[Route(Summary = "获得配置数据")]
[SwaggerResponse(HttpStatusCode.OK, typeof(MyConfig))]
[Route(Tags = new[] { "获得配置数据" })]
private object GetConfig()
{
return Response.AsJson(GlobalVariable.Config);
}
/// <summary>
/// 获得上传的文件
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object GetUploadFiles(string id)
{
string contentType = MimeTypes.GetMimeType(id);
return Response.AsFile(MyEnvironment.Root("/Upload/" + id), contentType);
}
/// <summary>
/// 上传图片
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
[Route("uploadImage")]//Name
[Route(HttpMethod.Post, "/uploadImage")]//Method And Path
[Route(Summary = "上传图片")]
[SwaggerResponse(HttpStatusCode.OK, typeof(RetValue<string>))]
[Route(Tags = new[] { "上传图片" })]
private object UploadImage([RouteParam(ParamIn = ParameterIn.Form, Name = "file", Description = "图片文件", ParamType = typeof(SwaggerFile), Required = true)] HttpFile file)
{
string uploadPath = MyEnvironment.Root("/Upload/");
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
string ext = Path.GetExtension(file.Name);
string fileName = UUID.StrSnowId + ext;
var filePath = uploadPath + fileName;
using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
{
file.Value.CopyTo(fileStream);
}
RetValue<string> result = new RetValue<string> { state = 1, message = "上传成功", data = $"/upload/{fileName}" };
return Response.AsJson(result);
}
[Route("save")]//Name
[Route(HttpMethod.Post, "/save")]//Method And Path
[Route(Summary = "保存配置")]
[SwaggerResponse(HttpStatusCode.OK, typeof(RetValue<string>))]
[Route(Tags = new[] { "保存配置" })]
private object SaveConfig([RouteParam(ParamIn = ParameterIn.Body, Name = "parms", Description = "保存参数", Required = true)] MyConfig config)
{
LogHelper.Instance.Info($"用户保存了配置:{JsonHelper.ToJson(config)}");
//保存
PropertyInfo[] propertyInfos = typeof(MyConfig).GetProperties();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
object value = propertyInfo.GetValue(config);
propertyInfo.SetValue(GlobalVariable.Config, value);
}
GlobalVariable.SaveConfig();
//保存并修改界面
EventBus.Instance.Publish("save", "");
RetValue<string> result = new RetValue<string> { state = 1, message = "保存成功" };
return Response.AsJson(result);
}
private object Resouce(string resourcePath)
{
string packUri = $"pack://application:,,,/Assets/{resourcePath}";
string contentType = MimeTypes.GetMimeType(packUri);
return Response.FromStream(System.Windows.Application.GetResourceStream(new Uri(packUri, UriKind.RelativeOrAbsolute)).Stream, contentType);
}
}
}