using Common.Models.Enums; using Common.Models.UnqTables; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Http; using Common.Utils; using Org.BouncyCastle.Asn1.Cms; using SqlSugar; namespace Server.Controllers.FunctionSetting { public class ResourcesController : DefaultController { /// /// 上传资源,迁移到ComControoller下面了 /// /// /// /// 获取文件列表 /// /// [HttpPost, ErrorFilter] public WebResult GetList() { var Keyword = GetString("Keyword"); var PageIndex = GetInt("PageIndex", true); var PageSize = GetInt("PageSize", true); var fileType = GetEnum("FileType"); var fileUse = GetEnum("FileUse"); if (PageSize > 100) PageSize = 100; var tNumber = 0; var exp = Expressionable.Create(); if (fileType != ResourcesType.未知) { exp.And(w => w.FileType == fileType); } if (fileUse != ResourcesUse.未知) { exp.And(w => w.FileUse == fileUse); } if (!string.IsNullOrEmpty(Keyword)) { exp.And(f => f.Filename.Contains(Keyword) || f.Filename.Contains(Keyword)); } var DataList = Db.Queryable().Where(exp.ToExpression()).OrderBy(o => o.CreateTime, OrderByType.Desc).ToPageList(PageIndex, PageSize, ref tNumber); var res = new PageResult(DataList, tNumber, PageSize, PageIndex); return PutData(res); } /// /// 删除文件 /// /// [HttpPost, ErrorFilter] public WebResult Remove() { var ids = GetIntList("Ids"); var items = Db.Queryable().In(ids).ToList(); if (items.Count==0) { return PutData("删除失败,未发现任何有关文件"); } var db = Db; bool isNotRemove = false; db.UseTran(() => { foreach (var item in items) { if (item.FileUse == ResourcesUse.凭证 ) { //如果不是超级管理员 if (Session == null || !Session.IsCreator) { //这个不能被删除 isNotRemove = true; return; } } db.Deleteable(item).ExecuteCommand(); } }, ex => throw ex); if (isNotRemove) { return PutData("操作失败,凭证文件非管理员不允许删除"); } else { //删除历史文件 foreach (var item in items) { Util.DeleteFile(Util.MapFile(item.FileId,defaultResourcesPath)); } } return PutSuccess; } /// /// 设置文件名 /// /// [HttpPost, ErrorFilter] public WebResult SetFilename() { var FileName = GetString("FileName"); var id = GetLong("Id"); var item = Db.Queryable().Where(w => w.Id == id).First(); if (item == null) { return PutData("设置失败,文件不存在"); } item.Filename = FileName; Db.Updateable(item).ExecuteCommand(); return PutSuccess; } private const string defaultResourcesPath = "网站\\resources"; [HttpPost, ErrorFilter] public WebResult ReplaceFile() { var Id = GetInt("Id",true); var resources = Db.Queryable().Single(f=>f.Id == Id); if (resources == null) return PutData("替换失败,该资源不存在或已被删除"); //替换只允许修改文件 var provider = new MultipartMemoryStreamProvider(); var r = Request.Content.ReadAsMultipartAsync(provider).Result; System.Net.Http.StreamContent item = null; foreach (var content in r.Contents) { switch (content.Headers.ContentDisposition.Name.Replace("\"", "")) { case "File": item = content as System.Net.Http.StreamContent; break; } } using (var ms = item.ReadAsStreamAsync().Result) { var oldFilename = Util.MapFile(resources.FileId, defaultResourcesPath); //重新修改文件ID resources.FileId = Guid.NewGuid().ToString("N"); resources.UpdateTime = DateTime.Now; //以随机数为文件名,防止同名文件被覆盖 var fileName = Util.MapFile(resources.FileId, defaultResourcesPath); try { using (var filems = File.OpenWrite(fileName)) { ms.CopyTo(filems); } } catch (Exception ex) { //如果新增失败,删掉无效文件 Util.DeleteFile(fileName); return PutData(ex); } Db.Updateable(resources).ExecuteCommand(); //更新成功,删掉老文件 Util.DeleteFile(oldFilename); } return PutData(resources); } } }