Files
EBoard/电子展板/WebModule/HomeModule.cs
2025-09-24 12:02:13 +08:00

174 lines
6.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 System.Text;
using System.Threading.Tasks;
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*}", StaticResource);
//获得配置
Get("/getConfig", GetConfig, null, "getConfig");
//获得上传的文件
Get("/upload/{id}", GetUploadFiles);
//上传图片
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", SaveConfig, null, "save");
}
/// <summary>
/// 默认页面
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object Index(dynamic dynamic)
{
return Resouce("Views/Index.html");
}
/// <summary>
/// 全局静态资源
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object StaticResource(dynamic dynamic)
{
string name = dynamic.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(dynamic dynamic)
{
//保留JSON KEY首字母大写这里就不用 Response.AsJson();
//AsJson会将首字母小写
return Response.AsText(JsonHelper.ToJson(GlobalVariable.Config), "application/json", Encoding.UTF8);
}
/// <summary>
/// 获得上传的文件
/// </summary>
/// <param name="dynamic"></param>
/// <returns></returns>
private object GetUploadFiles(dynamic dynamic)
{
string id = dynamic.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(dynamic dynamic)
{
MyConfig config = this.Bind<MyConfig>();
//string str = Request.Body.AsString();
//MyConfig config = JsonHelper.ToObject<MyConfig>(str);
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);
}
}
}