无私分享:从入门到精通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>&nbsp;没有找到任何文件</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开始,一起搭框架做项目 控制器基类 主要做登录用户权限认证日志记录等工作

无私分享:从入门到精通ASP.NET MVC从0开始,一起搭框架做项目(7.2) 模块管理,模块的添加修改删除