无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 (11)文件管理
Posted 我来自江湖,江湖却没有关于我的传说...
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 (11)文件管理相关的知识,希望对你有一定的参考价值。
索引
【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
简述
文件管理,这个比较鸡肋 但是有些方法 大家可以参考下
项目准备
我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。
项目开始
其实叫文件管理呢有点过,这个功能比较鸡肋,但是大家可以参考一下一些方法
一、我们在ComManage区域下面新建个控制器 UploadControllers
1、1 我们新建一个视图Home,这里接收的fileExt就是左侧用户选择的文件类型
1 /// <summary> 2 /// 文件管理默认页面 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "View")] 6 public ActionResult Home() 7 { 8 var fileExt = Request.QueryString["fileExt"] ?? ""; 9 ViewData["fileExt"] = fileExt; 10 return View(); 11 }
1、2 我们新建一个获取获取文件的方法 然后试图页通过ajax获取数据
1 /// <summary> 2 /// 通过路径获取所有文件 3 /// </summary> 4 /// <returns></returns> 5 public ActionResult GetAllFileData() 6 { 7 string fileExt = Request.Form["fileExt"]; 8 var jsonM = new JsonHelper() { Status = "y", Msg = "success" }; 9 try 10 { 11 var images = ConfigurationManager.AppSettings["Image"].Trim(\',\').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => "." + p).ToList(); 12 var videos = ConfigurationManager.AppSettings["Video"].Trim(\',\').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => "." + p).ToList(); 13 var musics = ConfigurationManager.AppSettings["Music"].Trim(\',\').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => "." + p).ToList(); 14 var documents = ConfigurationManager.AppSettings["Document"].Trim(\',\').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => "." + p).ToList(); 15 16 switch(fileExt) 17 { 18 case "images": 19 20 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).Where(p=>images.Any(e=>e==p.ext)).ToList(); 21 break; 22 case "videos": 23 24 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).Where(p => videos.Any(e => e == p.ext)).ToList(); 25 break; 26 case "musics": 27 28 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).Where(p => musics.Any(e => e == p.ext)).ToList(); 29 break; 30 case "files": 31 32 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).Where(p => documents.Any(e => e == p.ext)).ToList(); 33 break; 34 case "others": 35 36 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).Where(p => !images.Contains(p.ext) && !videos.Contains(p.ext) && !musics.Contains(p.ext) && !documents.Contains(p.ext)).ToList(); 37 break; 38 default: 39 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(ConfigurationManager.AppSettings["uppath"]))).OrderByDescending(p => p.name).ToList(); 40 break; 41 } 42 43 } 44 catch (Exception) 45 { 46 jsonM.Status = "err"; 47 jsonM.Msg = "获取文件失败!"; 48 } 49 return Content(JsonConverter.Serialize(jsonM, true)); 50 }
1、3 FileModel模型
1 /// <summary> 2 /// 文件名称 3 /// </summary> 4 public string name { get; set; } 5 /// <summary> 6 /// 文件全称 7 /// </summary> 8 public string fullname { get; set; } 9 /// <summary> 10 /// 文件路径 11 /// </summary> 12 public string path { get; set; } 13 /// <summary> 14 /// 文件格式 15 /// </summary> 16 public string ext { get; set; } 17 /// <summary> 18 /// 文件大小 19 /// </summary> 20 public string size { get; set; } 21 /// <summary> 22 /// 文件图标 23 /// </summary> 24 public string icon { get; set; } 25 /// <summary> 26 /// 是否为文件夹 27 /// </summary> 28 public bool isfolder { get; set; } 29 /// <summary> 30 /// 是否为图片 31 /// </summary> 32 public bool isImage { get; set; } 33 /// <summary> 34 /// 上传时间 35 /// </summary> 36 public DateTime time { get; set; }
1、4 FileHelper类GetAllFileTable方法 我们把获得的文件数据转换成DataTable 返回回来
1 /// <summary> 2 /// 获取目录下所有文件(包含子目录) 3 /// </summary> 4 /// <param name="Path"></param> 5 /// <returns></returns> 6 7 public static DataTable GetAllFileTable(string Path) 8 { 9 DataTable dt = new DataTable(); 10 dt.Columns.Add("name", typeof(string)); 11 dt.Columns.Add("ext", typeof(string)); 12 dt.Columns.Add("size", typeof(string)); 13 dt.Columns.Add("icon", typeof(string)); 14 dt.Columns.Add("isfolder", typeof(bool)); 15 dt.Columns.Add("isImage", typeof(bool)); 16 dt.Columns.Add("fullname", typeof(string)); 17 dt.Columns.Add("path", typeof(string)); 18 dt.Columns.Add("time", typeof(DateTime)); 19 20 string[] folders = Directory.GetDirectories(Path, "*", SearchOption.AllDirectories); 21 22 List<string> Listfloders = new List<string>() { Path }; 23 24 if (folders != null && folders.Count() > 0) 25 { 26 foreach (var folder in folders) 27 { 28 Listfloders.Add(folder); 29 } 30 } 31 32 foreach (var f in Listfloders) 33 { 34 DirectoryInfo dirinfo = new DirectoryInfo(f); 35 FileInfo fi; 36 string FileName = string.Empty, FileExt = string.Empty, FileSize = string.Empty, FileIcon = string.Empty, FileFullName = string.Empty, FilePath = string.Empty; 37 bool IsFloder = false, IsImage = false; 38 DateTime FileModify; 39 try 40 { 41 foreach (FileSystemInfo fsi in dirinfo.GetFiles()) 42 { 43 44 fi = (FileInfo)fsi; 45 //获取文件名称 46 FileName = fi.Name.Substring(0, fi.Name.LastIndexOf(\'.\')); 47 FileFullName = fi.Name; 48 //获取文件扩展名 49 FileExt = fi.Extension.ToLower(); 50 //获取文件大小 51 FileSize = GetDiyFileSize(fi); 52 //获取文件最后修改时间 53 FileModify = fi.LastWriteTime; 54 //文件图标 55 FileIcon = GetFileIcon(FileExt); 56 //是否为图片 57 IsImage = IsImageFile(FileExt.Substring(1, FileExt.Length - 1)); 58 //文件路径 59 FilePath = urlconvertor(fi.FullName); 60 61 DataRow dr = dt.NewRow(); 62 dr["name"] = FileName; 63 dr["fullname"] = FileFullName; 64 dr["ext"] = FileExt; 65 dr["size"] = FileSize; 66 dr["time"] = FileModify; 67 dr["icon"] = FileIcon; 68 dr["isfolder"] = IsFloder; 69 dr["isImage"] = IsImage; 70 dr["path"] = FilePath; 71 dt.Rows.Add(dr); 72 } 73 } 74 catch (Exception e) 75 { 76 77 throw e; 78 } 79 } 80 81 return dt; 82 }
1、5 展示文件列表
我用了个jquery.tmpl.js插件 大家可以用比较流行的 angularjs
这个JS包含了 加载文件列表、删除单个文件、删除多个文件、显示文件路径、复制文件、移动文件、压缩文件、解压文件等方法 我们待会分别把方法列出来
1 $(function () { 2 filesManage.initFiles(); 3 }); 4 var filesManage = { 5 initFiles: function () { 6 $.post("/Com/Upload/GetAllFileData", { fileExt: $("#fileExt").val() }, function (res) { 7 if (res.Status == "y") { 8 if (res.Data == "" || res.Data == null) { 9 $("#filesPanel").html(\'<div class="alert alert-warning text-center"><span style="font-size:16px;"><i class="fa fa-warning"></i> 没有找到任何文件</span></div>\'); 10 } else { 11 $("#filesPanel").empty(); 12 $("#tlist").tmpl(res.Data).appendTo(\'#filesPanel\'); 13 $(".file-box").each(function () { animationHover(this, "pulse") }); 14 //初始化CheckBox 15 $(".icheck_box").iCheck({ 16 checkboxClass: \'icheckbox_flat-red\', 17 radioClass: \'iradio_flat-red\', 18 increaseArea: \'20%\' // optional 19 }); 20 //点击选中/取消 21 $(".checkselected").click(function () { 22 if ($(this).parent().next().find(\'input[name="check_files"]\').prop("checked")) 23 { 24 $(this).parent().next().find(\'input[name="check_files"]\').iCheck("uncheck"); 25 } 26 else { 27 $(this).parent().next().find(\'input[name="check_files"]\').iCheck("check"); 28 } 29 }); 30 } 31 } 32 else { 33 dig.error(res.Msg); 34 } 35 }, "json"); 36 }, 37 delFiles: function (n) { 38 dig.confirm("删除确认", "删除后不可恢复,确定删除吗?", function () { 39 $.post("/Com/Upload/DeleteBy", { path: n }, function (res) { 40 if (res.Status == "y") 41 location.reload(); 42 else { 43 dig.error(res.Msg); 44 } 45 }, "json"); 46 }); 47 }, 48 delMoreFiles: function () { 49 var vals = \'\'; 50 $(\'input[name="check_files"]:checked\').each(function () { 51 vals += $(this).val() + \';\'; 52 }); 53 if (vals == \'\' || vals == \';\') { 54 dig.error("对不起,请选中您要操作的文件!"); 55 return; 56 } 57 dig.confirm("删除确认", "删除后不可恢复,确定删除吗?", function () { 58 $.post("/Com/Upload/DeleteBy", { path: vals }, function (res) { 59 if (res.Status == "y") 60 location.reload(); 61 else { 62 dig.error(res.Msg); 63 } 64 }, "json"); 65 }); 66 }, 67 showFilePath: function (n) { 68 dig.msg("","文件目录:"+n); 69 }, 70 copyFiles: function () { 71 var vals = \'\'; 72 $(\'input[name="check_files"]:checked\').each(function () { 73 vals += $(this).val() + \';\'; 74 }); 75 if (vals == \'\' || vals == \';\') { 76 dig.error("对不起,请选中您要操作的文件!"); 77 return; 78 } 79 dig.fileOperation(\'\',vals,"/Com/Upload/Copy", function () { 80 if (this.returnValue == \'yes\') { 81 location.reload(); 82 } 83 }); 84 }, 85 moveFiles: function () { 86 var vals = \'\'; 87 $(\'input[name="check_files"]:checked\').each(function () { 88 vals += $(this).val() + \';\'; 89 }); 90 if (vals == \'\' || vals == \';\') { 91 dig.error("对不起,请选中您要操作的文件!"); 92 return; 93 } 94 dig.fileOperation(\'\', vals, "/Com/Upload/Cut", function () { <以上是关于无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 (11)文件管理的主要内容,如果未能解决你的问题,请参考以下文章
无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 (11)文件管理
无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 角色管理,分配权限
无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目(5.3) 登录功能的实现,丰富数据表建立关联
无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 登录界面前端样式和特效
无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目 控制器基类 主要做登录用户权限认证日志记录等工作