using Nancy;
using Nancy.ModelBinding;
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()
{
//默认页面
Get("", Index);
Get("/", Index);
Get("/index.html", Index);
//全局静态资源
Get("/static/{name*}", StaticResource);
//获得配置
Get("/getConfig", GetConfig, null, "getConfig");
//获得上传的文件
Get("/upload/{id}", GetUploadFiles);
//上传图片
Post("/uploadImage", UploadImage, null, "uploadImage");
//保存配置
Post("/save", SaveConfig, null, "save");
}
//默认页面
private object Index(dynamic dynamic)
{
return Resouce("Views/Index.html");
}
//全局静态资源
private object StaticResource(dynamic dynamic)
{
string name = dynamic.name;
return Resouce(name);
}
///
/// 获得配置
///
///
///
private object GetConfig(dynamic dynamic)
{
//保留JSON KEY首字母大写,这里就不用 Response.AsJson();
//AsJson会将首字母小写
return Response.AsText(JsonHelper.ToJson(GlobalVariable.Config), "application/json", Encoding.UTF8);
}
///
/// 获得上传的文件
///
///
///
private object GetUploadFiles(dynamic dynamic)
{
string id = dynamic.id;
string contentType = System.Web.MimeMapping.GetMimeMapping(id);
return Response.AsFile(MyEnvironment.Root("/Upload/" + id), contentType);
}
///
/// 上传图片
///
///
///
private object UploadImage(dynamic dynamic)
{
string uploadPath = MyEnvironment.Root("/Upload/");
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
List filePathList = new List();
foreach (var file in Request.Files)
{
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);
}
filePathList.Add($"/Upload/{fileName}");
}
RetValue result = new RetValue { state = 1, message = "上传成功", data = filePathList.GetStrArray() };
return Response.AsJson(result);
}
private object SaveConfig(dynamic dynamic)
{
MyConfig config = this.Bind();
//string str = Request.Body.AsString();
//MyConfig config = JsonHelper.ToObject(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 result = new RetValue { state = 1, message = "保存成功" };
return Response.AsJson(result);
}
private object Resouce(string resourcePath)
{
string packUri = $"pack://application:,,,/Assets/{resourcePath}";
string contentType = System.Web.MimeMapping.GetMimeMapping(packUri);
return Response.FromStream(System.Windows.Application.GetResourceStream(new Uri(packUri, UriKind.RelativeOrAbsolute)).Stream, contentType);
}
}
}