码迷,mamicode.com
首页 > Web开发 > 详细

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 (11)文件管理

时间:2016-06-30 14:27:57      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!http://yuangang.cnblogs.com

希望大家好好一步一步做,所有的技术和项目,都毫无保留的提供,希望大家能自己跟着做一套,还有,请大家放心,只要大家喜欢,有人需要,绝对不会烂尾,我会坚持写完~

如果你感觉文章有帮助,点一下推荐,让更多的朋友参与进来,也是对本人劳动成果的鼓励,谢谢大家!由于还要工作,所以基本都是牺牲午休时间来写博客的,写博客呢不是简单的Ctrl+C、Ctrl+V,我是要挨着做一遍的,这也是对大家负责,所以有些时候更新不及时,或者问题没有及时解答,希望大家谅解,再次感谢大家!!

因为我引用了许多以前积累的类库,所以有些东西是重复的(后来更新),有些东西是过时的,包括我写的代码,希望大家不要纯粹的复制,取其精华去其糟粕>_<。

索引

【无私分享:从入门到精通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 () {
 95             if (this.returnValue == yes) {
 96                 location.reload();
 97             }
 98         });
 99     },
100     compressFiles: function () {
101         var vals = ‘‘;
102         $(input[name="check_files"]:checked).each(function () {
103             vals += $(this).val() + ;;
104         });
105         if (vals == ‘‘ || vals == ;) {
106             dig.error("对不起,请选中您要操作的文件!");
107             return;
108         }
109         dig.fileOperation(‘‘, vals, "/Com/Upload/Compress", function () {
110             if (this.returnValue == yes) {
111                 location.reload();
112             }
113         });
114     },
115     expandFiles: function () {
116         var vals = ‘‘;
117         var num = 0;
118         $(input[name="check_files"]:checked).each(function () {
119             vals = $(this).val();
120             num++;
121         });
122         if (!vals) {
123             dig.error("对不起,请选中您要操作的文件!");
124             return;
125         }
126         if (num > 1) {
127             dig.error("对不起,每次只能操作一个文件!");
128             return;
129         }
130         if(vals.substring(vals.lastIndexOf(.), vals.length)!=".zip")
131         {
132             dig.error("只能解压ZIP格式文件!");
133             return;
134         }
135         dig.fileOperation(‘‘, vals, "/Com/Upload/Expand", function () {
136             if (this.returnValue == yes) {
137                 location.reload();
138             }
139         });
140     }
141 };
142 function animationHover(o, e) {
143     o = $(o), o.hover(function () {
144         o.addClass("animated " + e)
145     }, function () {
146         window.setTimeout(function () {
147             o.removeClass("animated " + e)
148         }, 2e3)
149     })
150 }

 

二、文件操作

2、1 删除文件或文件夹

 1 /// <summary>
 2         /// 删除文件或文件夹
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Remove")]
 6         public ActionResult DeleteBy()
 7         {
 8             var jsonM = new JsonHelper() { Status = "y", Msg = "success" };
 9             try
10             {
11                 var path = Request.Form["path"].Trim(;).Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p).ToList();
12 
13                 foreach (var file in path)
14                 {
15                     //删除文件
16                     FileHelper.DeleteFile(Server.MapPath(file));
17                 }
18 
19                 WriteLog(Common.Enums.enumOperator.Remove, "删除文件:" + path, Common.Enums.enumLog4net.WARN);
20             }
21             catch (Exception ex)
22             {
23                 jsonM.Status = "err";
24                 jsonM.Msg = "删除过程中发生错误!";
25                 WriteLog(Common.Enums.enumOperator.Remove, "删除文件发生错误:", ex);
26             }
27             return Json(jsonM);
28         }

2、2 复制文件到文件夹

 1 /// <summary>
 2         /// 复制文件到文件夹
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Copy")]
 6         public ActionResult Copy(string files)
 7         {
 8             ViewData["Files"] = files;
 9             ViewData["spath"] = ConfigurationManager.AppSettings["uppath"];
10             return View();
11         }
12         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Copy")]
13         public ActionResult CopyFiles()
14         {
15             var json = new JsonHelper() { Msg = "复制文件完成", Status = "n" };
16 
17             try
18             {
19                 var files = Request.Form["files"].Trim(;).Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p).ToList();
20                 var path = Request.Form["path"];
21                 foreach (var file in files)
22                 {
23                     FileHelper.Copy(Server.MapPath(file), Server.MapPath(path) + FileHelper.GetFileName(Server.MapPath(file)));
24                 }
25                 WriteLog(Common.Enums.enumOperator.None, "复制文件:" + Request.Form["files"].Trim(;) + ",结果:" + json.Msg, Common.Enums.enumLog4net.WARN);
26                 json.Status = "y";
27             }
28             catch(Exception e)
29             {
30                 json.Msg = "复制文件失败!";
31                 WriteLog(Common.Enums.enumOperator.None, "复制文件:", e);
32             }
33 
34             return Json(json);
35         }

2、3 移动文件到文件夹

 1 /// <summary>
 2         /// 移动文件到文件夹
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Cut")]
 6         public ActionResult Cut(string files)
 7         {
 8             ViewData["Files"] = files;
 9             ViewData["spath"] = ConfigurationManager.AppSettings["uppath"];
10             return View();
11         }
12         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Cut")]
13         public ActionResult CutFiles()
14         {
15             var json = new JsonHelper() { Msg = "移动文件完成", Status = "n" };
16 
17             try
18             {
19                 var files = Request.Form["files"].Trim(;).Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p).ToList();
20                 var path = Request.Form["path"];
21                 foreach (var file in files)
22                 {
23                     FileHelper.Move(Server.MapPath(file), Server.MapPath(path));
24                 }
25                 WriteLog(Common.Enums.enumOperator.None, "移动文件:" + Request.Form["files"].Trim(;) + ",结果:" + json.Msg, Common.Enums.enumLog4net.WARN);
26                 json.Status = "y";
27             }
28             catch (Exception e)
29             {
30                 json.Msg = "移动文件失败!";
31                 WriteLog(Common.Enums.enumOperator.None, "移动文件:", e);
32             }
33 
34             return Json(json);
35         }

2、4 压缩文件

 1 /// <summary>
 2         /// 压缩文件
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Compress")]
 6         public ActionResult Compress(string files)
 7         {
 8             ViewData["Files"] = files;
 9             ViewData["spath"] = ConfigurationManager.AppSettings["uppath"];
10             return View();
11         }
12         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Compress")]
13         public ActionResult CompressFiles()
14         {
15             var json = new JsonHelper() { Msg = "压缩文件完成", Status = "n" };
16 
17             try
18             {
19                 var files = Request.Form["files"].Trim(;).Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p).ToList();
20                 var path = Request.Form["path"];
21                 foreach (var file in files)
22                 {
23                     ZipHelper.ZipFile(Server.MapPath(file), Server.MapPath(path));
24                 }
25                 //ZipHelper.ZipDirectory(Server.MapPath("/upload/files/"), Server.MapPath(path));
26                 WriteLog(Common.Enums.enumOperator.None, "压缩文件:" + Request.Form["files"].Trim(;) + ",结果:" + json.Msg, Common.Enums.enumLog4net.WARN);
27                 json.Status = "y";
28             }
29             catch (Exception e)
30             {
31                 json.Msg = "压缩文件失败!";
32                 WriteLog(Common.Enums.enumOperator.None, "压缩文件:", e);
33             }
34 
35             return Json(json);
36         }

2、5 解压文件

 1 /// <summary>
 2         /// 解压文件
 3         /// </summary>
 4         /// <returns></returns>
 5         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Expand")]
 6         public ActionResult Expand(string files)
 7         {
 8             ViewData["Files"] = files;
 9             ViewData["spath"] = ConfigurationManager.AppSettings["uppath"];
10             return View();
11         }
12         [UserAuthorizeAttribute(ModuleAlias = "Files", OperaAction = "Expand")]
13         public ActionResult ExpandFiles()
14         {
15             var json = new JsonHelper() { Msg = "解压文件完成", Status = "n" };
16 
17             try
18             {
19                 var files = Request.Form["files"];
20                 var path = Request.Form["path"];
21                 var password = Request.Form["password"];
22 
23                 if (string.IsNullOrEmpty(password))
24                 {
25                     json.Msg = "请输入解压密码!";
26                     return Json(json);
27                 }
28 
29                 string CurrentPassword=ConfigurationManager.AppSettings["ZipPassword"] != null ? new Common.CryptHelper.AESCrypt().Decrypt(ConfigurationManager.AppSettings["ZipPassword"].ToString()) : "guodongbudingxizhilang";
30 
31                 if (password != CurrentPassword)
32                 {
33                     json.Msg = "解压密码无效!";
34                     return Json(json);
35                 }
36                
37                 ZipHelper.UnZip(Server.MapPath(files), Server.MapPath(path),password);
38                 
39                 WriteLog(Common.Enums.enumOperator.None, "解压文件:" + Request.Form["files"].Trim(;) + ",结果:" + json.Msg, Common.Enums.enumLog4net.WARN);
40                 json.Status = "y";
41             }
42             catch (Exception e)
43             {
44                 json.Msg = "解压文件失败!";
45                 WriteLog(Common.Enums.enumOperator.None, "解压文件:", e);
46             }
47 
48             return Json(json);
49         }

 

关于压缩和解压文件 我用的是ICSharpCode.SharpZipLib 有不太了解的朋友可以参考一下:ICSharpCode.SharpZipLib 压缩、解压文件 附源码

 

三、单文件上传

技术分享

3、1 我们建一个上传视图页

1 /// <summary>
2         /// 单文件上传视图
3         /// </summary>
4         /// <returns></returns>
5         public ActionResult FileMain()
6         {
7             ViewData["spath"] = ConfigurationManager.AppSettings["uppath"];
8             return View();
9         }

3、2 试图页的Js

  1 $(function () {
  2     //获取IFrame传递过来的值
  3     var dialog = top.dialog.get(window);
  4     var data = dialog.data;
  5     $("#fileUrl").val(data);
  6     if (data != ‘‘ && data != undefined) {
  7         //文件定位
  8         var p = data.substring(0, data.lastIndexOf(/) + 1);
  9         $(#path).val(p);
 10         $(#jsons).val({"path":" + data + "});
 11     }
 12     signfiles.initFiles($("#path").val());
 13     //上传
 14     $(".sign-upload").click(function () {
 15         $("#fileUp").unbind();
 16         $("#fileUp").click();
 17     });
 18     //保存
 19     $(".btn-save").click(function () {
 20         dialog.close($("#jsons").val());
 21         dialog.remove();
 22     });
 23     //返回上级目录
 24     $(".btn-higher-up").click(function () {
 25         signfiles.OpenParentFolder();
 26     });
 27 });
 28 var signfiles = {
 29     signUpFile: function (upInput) {
 30         var subUrl = "/Com/Upload/SignUpFile?fileUp=fileUrl&isThumbnail=" + $("#isThumbnail").prop("checked") + "&isWater=" + $("#isWater").prop("checked");
 31         $("#forms").ajaxSubmit({
 32             beforeSubmit: function () {
 33                 dig.loading("正在上传");
 34                 $(".sign-upload").attr("disabled", "disabled");
 35             },
 36             success: function (data) {
 37                 if (data.Status == "y") {
 38                     var res = eval(( + data.Data + ));
 39                     $(#fileUrl).val(res.path);
 40                     $(#jsons).val(data.Data);
 41                     //定位
 42                     var pa = res.path.substring(0, res.path.lastIndexOf(/) + 1);
 43                     $(#path).val(pa);
 44                     signfiles.initFiles(pa);
 45                     sweetAlert.close();
 46                 } else {
 47                     dig.error(data.Msg);
 48                 }
 49                 $(".sign-upload").attr("disabled", false);
 50 
 51             },
 52             error: function (e) {
 53                 sweetAlert.close();
 54                 $(".sign-upload").attr("disabled", false);
 55                 console.log(e);
 56             },
 57             url: subUrl,
 58             type: "post",
 59             dataType: "json",
 60             timeout: 600000
 61         });
 62     },
 63     initFiles: function (path) {
 64         if (path == $("#spath").val()) {
 65             $(".btn-higher-up").attr("disabled", "disabled");
 66         } else {
 67             $(".btn-higher-up").attr("disabled", false);
 68         }
 69         $.post("/Com/Upload/GetFileData", { path: path }, function (res) {
 70             if (res.Status == "y") {
 71                 if (res.Data == "" || res.Data == null) {
 72                     dig.error("该目录下没有文件了!");
 73                     signfiles.OpenParentFolder();
 74                 } else {
 75                     $("#filesPanel").empty();
 76                     $("#tlist").tmpl(res.Data).appendTo(#filesPanel);
 77                 }
 78             } else if (res.Status == "empty") {
 79                 $("#filesPanel").html(<div class="alert alert-warning text-center"><span style="font-size:16px;"><i class="fa fa-warning"></i>&nbsp;没有找到任何文件</span></div>);
 80             }
 81             else {
 82                 dig.error(res.Msg);
 83             }
 84         }, "json");
 85     },
 86     OpenFolder: function (path) {
 87         var npath = $("#path").val() + path + "/";
 88         $("#path").val(npath);
 89         signfiles.initFiles(npath);
 90     },
 91     OpenParentFolder: function () {
 92         var p = $("#path").val();
 93         if (p == $("#spath").val()) return;
 94         p = p.substring(0, p.lastIndexOf(/));
 95         p = p.substring(0, p.lastIndexOf(/)) + "/";
 96         $("#path").val(p);
 97         signfiles.initFiles(p);
 98     },
 99     SetFile: function (path, ext,size,name) {
100         $("#fileUrl").val($("#path").val() + path);
101         $(#jsons).val({"path":" + $("#path").val() + path + ","thumbpath":" + $("#path").val() + "thumb_" + path +  ","ext":" + ext + ","unitsize":" + size + ","newname":" + name + ","oldname":" + name + "});
102     }
103 }

3、3 单文件上传方法

 1  /// <summary>
 2         /// 单个文件上传
 3         /// </summary>
 4         [HttpPost]
 5         public ActionResult SignUpFile()
 6         {
 7             var jsonM = new JsonHelper() { Status = "n", Msg = "success" };
 8             try
 9             {
10                 //取得上传文件
11                 HttpPostedFileBase upfile = Request.Files["fileUp"];
12 
13                 //原始文件路径
14                 string delpath = Request.QueryString["delpath"];
15 
16                 //缩略图
17                 bool isThumbnail = string.IsNullOrEmpty(Request.QueryString["isThumbnail"]) ? false : Request.QueryString["isThumbnail"].ToLower() == "true" ? true : false;
18                 //水印
19                 bool isWater = string.IsNullOrEmpty(Request.QueryString["isWater"]) ? false : Request.QueryString["isWater"].ToLower() == "true" ? true : false;
20 
21 
22                 if (upfile == null)
23                 {
24                     jsonM.Msg = "请选择要上传文件!";
25                     return Json(jsonM);
26                 }
27                 jsonM = FileSaveAs(upfile, isThumbnail, isWater);
28 
29                 #region 移除原始文件
30                 if (jsonM.Status == "y" && !string.IsNullOrEmpty(delpath))
31                 {
32                     if (System.IO.File.Exists(Utils.GetMapPath(delpath)))
33                     {
34                         System.IO.File.Delete(Utils.GetMapPath(delpath));
35                     }
36                 }
37                 #endregion
38 
39                 if (jsonM.Status == "y")
40                 {
41                     #region 记录上传数据
42                     string unit = string.Empty;
43                     var jsonValue = Common.JsonConverter.ConvertJson(jsonM.Data.ToString());
44                     var entity = new Domain.COM_UPLOAD()
45                     {
46                         ID = Guid.NewGuid().ToString(),
47                         FK_USERID = this.CurrentUser.Id.ToString(),
48                         UPOPEATOR = this.CurrentUser.Name,
49                         UPTIME = DateTime.Now,
50                         UPOLDNAME = jsonValue.oldname,
51                         UPNEWNAME = jsonValue.newname,
52                         UPFILESIZE = FileHelper.GetDiyFileSize(long.Parse(jsonValue.size), out unit),
53                         UPFILEUNIT = unit,
54                         UPFILEPATH = jsonValue.path,
55                         UPFILESUFFIX = jsonValue.ext,
56                         UPFILETHUMBNAIL = jsonValue.thumbpath,
57                         UPFILEIP = Utils.GetIP(),
58                         UPFILEURL = "http://" + Request.Url.AbsoluteUri.Replace("http://", "").Substring(0, Request.Url.AbsoluteUri.Replace("http://", "").IndexOf(/))
59                     };
60                     this.UploadManage.Save(entity);
61                     #endregion
62 
63                     #region 返回文件信息
64                     jsonM.Data = "{\"oldname\": \"" + jsonValue.oldname + "\","; //原始名称
65                     jsonM.Data += " \"newname\":\"" + jsonValue.newname + "\","; //新名称
66                     jsonM.Data += " \"path\": \"" + jsonValue.path + "\", ";  //路径
67                     jsonM.Data += " \"thumbpath\":\"" + jsonValue.thumbpath + "\","; //缩略图
68                     jsonM.Data += " \"size\": \"" + jsonValue.size + "\",";   //大小
69                     jsonM.Data += " \"id\": \"" + entity.ID + "\",";   //上传文件ID
70                     jsonM.Data += " \"uptime\": \"" + entity.UPTIME + "\",";   //上传时间
71                     jsonM.Data += " \"operator\": \"" + entity.UPOPEATOR + "\",";   //上传人
72                     jsonM.Data += " \"unitsize\": \"" + entity.UPFILESIZE + unit + "\",";   //带单位大小
73                     jsonM.Data += "\"ext\":\"" + jsonValue.ext + "\"}";//后缀名
74                     #endregion
75                 }
76 
77             }
78             catch (Exception ex)
79             {
80                 jsonM.Msg = "上传过程中发生错误,消息:" + ex.Message;
81                 jsonM.Status = "n";
82             }
83             return Json(jsonM);
84         }

3、4 文件上传方法

 1 /// <summary>
 2        /// 文件上传方法
 3        /// </summary>
 4        /// <param name="postedFile">文件流</param>
 5        /// <param name="isThumbnail">是否生成缩略图</param>
 6        /// <param name="isWater">是否生成水印</param>
 7        /// <returns>上传后文件信息</returns>
 8         private JsonHelper FileSaveAs(HttpPostedFileBase postedFile, bool isThumbnail, bool isWater)
 9         {
10             var jsons = new JsonHelper { Status = "n" };
11             try
12             {
13                 string fileExt = Utils.GetFileExt(postedFile.FileName); //文件扩展名,不含“.”
14                 int fileSize = postedFile.ContentLength; //获得文件大小,以字节为单位
15                 string fileName = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf(@"\") + 1); //取得原文件名
16                 string newFileName = Utils.GetRamCode() + "." + fileExt; //随机生成新的文件名
17                 string upLoadPath = GetUpLoadPath(fileExt); //上传目录相对路径
18                 string fullUpLoadPath = Utils.GetMapPath(upLoadPath); //上传目录的物理路径
19                 string newFilePath = upLoadPath + newFileName; //上传后的路径
20                 string newThumbnailFileName = "thumb_" + newFileName; //随机生成缩略图文件名
21 
22                 //检查文件扩展名是否合法
23                 if (!CheckFileExt(fileExt))
24                 {
25                     jsons.Msg = "不允许上传" + fileExt + "类型的文件!";
26                     return jsons;
27                 }
28 
29                 //检查文件大小是否合法
30                 if (!CheckFileSize(fileExt, fileSize))
31                 {
32                     jsons.Msg = "文件超过限制的大小啦!";
33                     return jsons;
34                 }
35 
36                 //检查上传的物理路径是否存在,不存在则创建
37                 if (!Directory.Exists(fullUpLoadPath))
38                 {
39                     Directory.CreateDirectory(fullUpLoadPath);
40                 }
41 
42                 //检查文件是否真实合法
43                 //如果文件真实合法 则 保存文件 关闭文件流
44                 //if (!CheckFileTrue(postedFile, fullUpLoadPath + newFileName))
45                 //{
46                 //    jsons.Msg = "不允许上传不可识别的文件!";
47                 //    return jsons;
48                 //}
49 
50                 //保存文件
51                 postedFile.SaveAs(fullUpLoadPath + newFileName);
52 
53                 string thumbnail = string.Empty;
54 
55                 //如果是图片,检查是否需要生成缩略图,是则生成
56                 if (IsImage(fileExt) && isThumbnail && ConfigurationManager.AppSettings["ThumbnailWidth"].ToString() != "0" && ConfigurationManager.AppSettings["ThumbnailHeight"].ToString() != "0")
57                 {
58                     Thumbnail.MakeThumbnailImage(fullUpLoadPath + newFileName, fullUpLoadPath + newThumbnailFileName,
59                        int.Parse(ConfigurationManager.AppSettings["ThumbnailWidth"]), int.Parse(ConfigurationManager.AppSettings["ThumbnailHeight"]), "W");
60                     thumbnail = upLoadPath + newThumbnailFileName;
61                 }
62                 //如果是图片,检查是否需要打水印
63                 if (IsImage(fileExt) && isWater)
64                 {
65                     switch (ConfigurationManager.AppSettings["WatermarkType"].ToString())
66                     {
67                         case "1":
68                             WaterMark.AddImageSignText(newFilePath, newFilePath,
69                                 ConfigurationManager.AppSettings["WatermarkText"], int.Parse(ConfigurationManager.AppSettings["WatermarkPosition"]),
70                                 int.Parse(ConfigurationManager.AppSettings["WatermarkImgQuality"]), ConfigurationManager.AppSettings["WatermarkFont"], int.Parse(ConfigurationManager.AppSettings["WatermarkFontsize"]));
71                             break;
72                         case "2":
73                             WaterMark.AddImageSignPic(newFilePath, newFilePath,
74                                 ConfigurationManager.AppSettings["WatermarkPic"], int.Parse(ConfigurationManager.AppSettings["WatermarkPosition"]),
75                                 int.Parse(ConfigurationManager.AppSettings["WatermarkImgQuality"]), int.Parse(ConfigurationManager.AppSettings["WatermarkTransparency"]));
76                             break;
77                     }
78                 }
79 
80                 string unit = string.Empty;
81 
82                 //处理完毕,返回JOSN格式的文件信息
83                 jsons.Data = "{\"oldname\": \"" + fileName + "\",";     //原始文件名
84                 jsons.Data += " \"newname\":\"" + newFileName + "\",";  //文件新名称
85                 jsons.Data += " \"path\": \"" + newFilePath + "\", ";   //文件路径
86                 jsons.Data += " \"thumbpath\":\"" + thumbnail + "\",";  //缩略图路径
87                 jsons.Data += " \"size\": \"" + fileSize + "\",";       //文件大小
88                 jsons.Data += "\"ext\":\"" + fileExt + "\"}";           //文件格式
89                 jsons.Status = "y";
90                 return jsons;
91             }
92             catch
93             {
94                 jsons.Msg = "上传过程中发生意外错误!";
95                 return jsons;
96             }
97         }

3、5 缩略图 水印

  1  /// <summary>
  2     /// 缩略图构造类
  3     /// </summary>
  4     public class Thumbnail
  5     {
  6         private Image srcImage;
  7         private string srcFileName;
  8 
  9         /// <summary>
 10         /// 创建
 11         /// </summary>
 12         /// <param name="FileName">原始图片路径</param>
 13         public bool SetImage(string FileName)
 14         {
 15             srcFileName = Utils.GetMapPath(FileName);
 16             try
 17             {
 18                 srcImage = Image.FromFile(srcFileName);
 19             }
 20             catch
 21             {
 22                 return false;
 23             }
 24             return true;
 25 
 26         }
 27 
 28         /// <summary>
 29         /// 回调
 30         /// </summary>
 31         /// <returns></returns>
 32         public bool ThumbnailCallback()
 33         {
 34             return false;
 35         }
 36 
 37         /// <summary>
 38         /// 生成缩略图,返回缩略图的Image对象
 39         /// </summary>
 40         /// <param name="Width">缩略图宽度</param>
 41         /// <param name="Height">缩略图高度</param>
 42         /// <returns>缩略图的Image对象</returns>
 43         public Image GetImage(int Width, int Height)
 44         {
 45             Image img;
 46             Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
 47             img = srcImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
 48             return img;
 49         }
 50 
 51         /// <summary>
 52         /// 保存缩略图
 53         /// </summary>
 54         /// <param name="Width"></param>
 55         /// <param name="Height"></param>
 56         public void SaveThumbnailImage(int Width, int Height)
 57         {
 58             switch (Path.GetExtension(srcFileName).ToLower())
 59             {
 60                 case ".png":
 61                     SaveImage(Width, Height, ImageFormat.Png);
 62                     break;
 63                 case ".gif":
 64                     SaveImage(Width, Height, ImageFormat.Gif);
 65                     break;
 66                 case ".bmp":
 67                     SaveImage(Width, Height, ImageFormat.Bmp);
 68                     break;
 69                 default:
 70                     SaveImage(Width, Height, ImageFormat.Jpeg);
 71                     break;
 72             }
 73         }
 74 
 75         /// <summary>
 76         /// 生成缩略图并保存
 77         /// </summary>
 78         /// <param name="Width">缩略图的宽度</param>
 79         /// <param name="Height">缩略图的高度</param>
 80         /// <param name="imgformat">保存的图像格式</param>
 81         /// <returns>缩略图的Image对象</returns>
 82         public void SaveImage(int Width, int Height, ImageFormat imgformat)
 83         {
 84             if (imgformat != ImageFormat.Gif && (srcImage.Width > Width) || (srcImage.Height > Height))
 85             {
 86                 Image img;
 87                 Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
 88                 img = srcImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
 89                 srcImage.Dispose();
 90                 img.Save(srcFileName, imgformat);
 91                 img.Dispose();
 92             }
 93         }
 94 
 95         #region Helper
 96 
 97         /// <summary>
 98         /// 保存图片
 99         /// </summary>
100         /// <param name="image">Image 对象</param>
101         /// <param name="savePath">保存路径</param>
102         /// <param name="ici">指定格式的编解码参数</param>
103         private static void SaveImage(Image image, string savePath, ImageCodecInfo ici)
104         {
105             //设置 原图片 对象的 EncoderParameters 对象
106             EncoderParameters parameters = new EncoderParameters(1);
107             parameters.Param[0] = new EncoderParameter(Encoder.Quality, ((long)100));
108             image.Save(savePath, ici, parameters);
109             parameters.Dispose();
110         }
111 
112         /// <summary>
113         /// 获取图像编码解码器的所有相关信息
114         /// </summary>
115         /// <param name="mimeType">包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串</param>
116         /// <returns>返回图像编码解码器的所有相关信息</returns>
117         private static ImageCodecInfo GetCodecInfo(string mimeType)
118         {
119             ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
120             foreach (ImageCodecInfo ici in CodecInfo)
121             {
122                 if (ici.MimeType == mimeType)
123                     return ici;
124             }
125             return null;
126         }
127 
128         /// <summary>
129         /// 计算新尺寸
130         /// </summary>
131         /// <param name="width">原始宽度</param>
132         /// <param name="height">原始高度</param>
133         /// <param name="maxWidth">最大新宽度</param>
134         /// <param name="maxHeight">最大新高度</param>
135         /// <returns></returns>
136         private static Size ResizeImage(int width, int height, int maxWidth, int maxHeight)
137         {
138             //此次2012-02-05修改过=================
139             if (maxWidth <= 0)
140                 maxWidth = width;
141             if (maxHeight <= 0)
142                 maxHeight = height;
143             //以上2012-02-05修改过=================
144             decimal MAX_WIDTH = (decimal)maxWidth;
145             decimal MAX_HEIGHT = (decimal)maxHeight;
146             decimal ASPECT_RATIO = MAX_WIDTH / MAX_HEIGHT;
147 
148             int newWidth, newHeight;
149             decimal originalWidth = (decimal)width;
150             decimal originalHeight = (decimal)height;
151 
152             if (originalWidth > MAX_WIDTH || originalHeight > MAX_HEIGHT)
153             {
154                 decimal factor;
155                 // determine the largest factor 
156                 if (originalWidth / originalHeight > ASPECT_RATIO)
157                 {
158                     factor = originalWidth / MAX_WIDTH;
159                     newWidth = Convert.ToInt32(originalWidth / factor);
160                     newHeight = Convert.ToInt32(originalHeight / factor);
161                 }
162                 else
163                 {
164                     factor = originalHeight / MAX_HEIGHT;
165                     newWidth = Convert.ToInt32(originalWidth / factor);
166                     newHeight = Convert.ToInt32(originalHeight / factor);
167                 }
168             }
169             else
170             {
171                 newWidth = width;
172                 newHeight = height;
173             }
174             return new Size(newWidth, newHeight);
175         }
176 
177         /// <summary>
178         /// 得到图片格式
179         /// </summary>
180         /// <param name="name">文件名称</param>
181         /// <returns></returns>
182         public static ImageFormat GetFormat(string name)
183         {
184             string ext = name.Substring(name.LastIndexOf(".") + 1);
185             switch (ext.ToLower())
186             {
187                 case "jpg":
188                 case "jpeg":
189                     return ImageFormat.Jpeg;
190                 case "bmp":
191                     return ImageFormat.Bmp;
192                 case "png":
193                     return ImageFormat.Png;
194                 case "gif":
195                     return ImageFormat.Gif;
196                 default:
197                     return ImageFormat.Jpeg;
198             }
199         }
200         #endregion
201 
202         /// <summary>
203         /// 制作小正方形
204         /// </summary>
205         /// <param name="image">图片对象</param>
206         /// <param name="newFileName">新地址</param>
207         /// <param name="newSize">长度或宽度</param>
208         public static void MakeSquareImage(Image image, string newFileName, int newSize)
209         {
210             int i = 0;
211             int width = image.Width;
212             int height = image.Height;
213             if (width > height)
214                 i = height;
215             else
216                 i = width;
217 
218             Bitmap b = new Bitmap(newSize, newSize);
219 
220             try
221             {
222                 Graphics g = Graphics.FromImage(b);
223                 //设置高质量插值法
224                 g.InterpolationMode = InterpolationMode.HighQualityBicubic;
225                 //设置高质量,低速度呈现平滑程度
226                 g.SmoothingMode = SmoothingMode.AntiAlias;
227                 g.PixelOffsetMode = PixelOffsetMode.HighQuality;
228                 //清除整个绘图面并以透明背景色填充
229                 g.Clear(Color.Transparent);
230                 if (width < height)
231                     g.DrawImage(image, new Rectangle(0, 0, newSize, newSize), new Rectangle(0, (height - width) / 2, width, width), GraphicsUnit.Pixel);
232                 else
233                     g.DrawImage(image, new Rectangle(0, 0, newSize, newSize), new Rectangle((width - height) / 2, 0, height, height), GraphicsUnit.Pixel);
234 
235                 SaveImage(b, newFileName, GetCodecInfo("image/" + GetFormat(newFileName).ToString().ToLower()));
236             }
237             finally
238             {
239                 image.Dispose();
240                 b.Dispose();
241             }
242         }
243 
244         /// <summary>
245         /// 制作小正方形
246         /// </summary>
247         /// <param name="fileName">图片文件名</param>
248         /// <param name="newFileName">新地址</param>
249         /// <param name="newSize">长度或宽度</param>
250         public static void MakeSquareImage(string fileName, string newFileName, int newSize)
251         {
252             MakeSquareImage(Image.FromFile(fileName), newFileName, newSize);
253         }
254 
255         /// <summary>
256         /// 制作远程小正方形
257         /// </summary>
258         /// <param name="url">图片url</param>
259         /// <param name="newFileName">新地址</param>
260         /// <param name="newSize">长度或宽度</param>
261         public static void MakeRemoteSquareImage(string url, string newFileName, int newSize)
262         {
263             Stream stream = GetRemoteImage(url);
264             if (stream == null)
265                 return;
266             Image original = Image.FromStream(stream);
267             stream.Close();
268             MakeSquareImage(original, newFileName, newSize);
269         }
270 
271         /// <summary>
272         /// 制作缩略图
273         /// </summary>
274         /// <param name="original">图片对象</param>
275         /// <param name="newFileName">新图路径</param>
276         /// <param name="maxWidth">最大宽度</param>
277         /// <param name="maxHeight">最大高度</param>
278         public static void MakeThumbnailImage(Image original, string newFileName, int maxWidth, int maxHeight)
279         {
280             Size _newSize = ResizeImage(original.Width, original.Height, maxWidth, maxHeight);
281 
282             using (Image displayImage = new Bitmap(original, _newSize))
283             {
284                 try
285                 {
286                     if (original.Width > maxWidth)
287                     {
288                         displayImage.Save(newFileName, original.RawFormat);
289                     }
290                 }
291                 finally
292                 {
293                     original.Dispose();
294                 }
295             }
296         }
297 
298         /// <summary>
299         /// 制作缩略图
300         /// </summary>
301         /// <param name="fileName">文件名</param>
302         /// <param name="newFileName">新图路径</param>
303         /// <param name="maxWidth">最大宽度</param>
304         /// <param name="maxHeight">最大高度</param>
305         public static void MakeThumbnailImage(string fileName, string newFileName, int maxWidth, int maxHeight)
306         {
307             //2012-02-05修改过,支持替换
308             byte[] imageBytes = File.ReadAllBytes(fileName);
309             Image img = Image.FromStream(new System.IO.MemoryStream(imageBytes));
310             if (img.Width > maxWidth)
311             {
312                 MakeThumbnailImage(img, newFileName, maxWidth, maxHeight);
313             }
314             //原文
315             //MakeThumbnailImage(Image.FromFile(fileName), newFileName, maxWidth, maxHeight);
316         }
317 
318         #region 2012-2-19 新增生成图片缩略图方法
319         /// <summary>
320         /// 生成缩略图
321         /// </summary>
322         /// <param name="fileName">源图路径(绝对路径)</param>
323         /// <param name="newFileName">缩略图路径(绝对路径)</param>
324         /// <param name="width">缩略图宽度</param>
325         /// <param name="height">缩略图高度</param>
326         /// <param name="mode">生成缩略图的方式</param>    
327         public static bool MakeThumbnailImage(string fileName, string newFileName, int width, int height, string mode)
328         {
329             Image originalImage = Image.FromFile(fileName);
330             int towidth = width;
331             int toheight = height;
332 
333             int x = 0;
334             int y = 0;
335             int ow = originalImage.Width;
336             int oh = originalImage.Height;
337 
338             if (ow > towidth)
339             {
340                 switch (mode)
341                 {
342                     case "HW"://指定高宽缩放(可能变形)                
343                         break;
344                     case "W"://指定宽,高按比例                    
345                         toheight = originalImage.Height * width / originalImage.Width;
346                         break;
347                     case "H"://指定高,宽按比例
348                         towidth = originalImage.Width * height / originalImage.Height;
349                         break;
350                     case "Cut"://指定高宽裁减(不变形)                
351                         if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
352                         {
353                             oh = originalImage.Height;
354                             ow = originalImage.Height * towidth / toheight;
355                             y = 0;
356                             x = (originalImage.Width - ow) / 2;
357                         }
358                         else
359                         {
360                             ow = originalImage.Width;
361                             oh = originalImage.Width * height / towidth;
362                             x = 0;
363                             y = (originalImage.Height - oh) / 2;
364                         }
365                         break;
366                     default:
367                         break;
368                 }
369 
370                 //新建一个bmp图片
371                 Bitmap b = new Bitmap(towidth, toheight);
372                 try
373                 {
374                     //新建一个画板
375                     Graphics g = Graphics.FromImage(b);
376                     //设置高质量插值法
377                     g.InterpolationMode = InterpolationMode.HighQualityBicubic;
378                     //设置高质量,低速度呈现平滑程度
379                     g.SmoothingMode = SmoothingMode.AntiAlias;
380                     g.PixelOffsetMode = PixelOffsetMode.HighQuality;
381                     //清空画布并以透明背景色填充
382                     g.Clear(Color.Transparent);
383                     //在指定位置并且按指定大小绘制原图片的指定部分
384                     g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);
385 
386                     SaveImage(b, newFileName, GetCodecInfo("image/" + GetFormat(newFileName).ToString().ToLower()));
387                 }
388                 catch (System.Exception e)
389                 {
390                     throw e;
391                 }
392                 finally
393                 {
394                     originalImage.Dispose();
395                     b.Dispose();
396                 }
397                 return true;
398             }
399             else
400             {
401                 originalImage.Dispose();
402                 return false;
403             }
404         }
405         #endregion
406 
407         #region 2012-10-30 新增图片裁剪方法
408         /// <summary>
409         /// 裁剪图片并保存
410         /// </summary>
411         /// <param name="fileName">源图路径(绝对路径)</param>
412         /// <param name="newFileName">缩略图路径(绝对路径)</param>
413         /// <param name="maxWidth">缩略图宽度</param>
414         /// <param name="maxHeight">缩略图高度</param>
415         /// <param name="cropWidth">裁剪宽度</param>
416         /// <param name="cropHeight">裁剪高度</param>
417         /// <param name="X">X轴</param>
418         /// <param name="Y">Y轴</param>
419         public static bool MakeThumbnailImage(string fileName, string newFileName, int maxWidth, int maxHeight, int cropWidth, int cropHeight, int X, int Y)
420         {
421             byte[] imageBytes = File.ReadAllBytes(fileName);
422             Image originalImage = Image.FromStream(new System.IO.MemoryStream(imageBytes));
423             Bitmap b = new Bitmap(cropWidth, cropHeight);
424             try
425             {
426                 using (Graphics g = Graphics.FromImage(b))
427                 {
428                     //设置高质量插值法
429                     g.InterpolationMode = InterpolationMode.HighQualityBicubic;
430                     //设置高质量,低速度呈现平滑程度
431                     g.SmoothingMode = SmoothingMode.AntiAlias;
432                     g.PixelOffsetMode = PixelOffsetMode.HighQuality;
433                     //清空画布并以透明背景色填充
434                     g.Clear(Color.Transparent);
435                     //在指定位置并且按指定大小绘制原图片的指定部分
436                     g.DrawImage(originalImage, new Rectangle(0, 0, cropWidth, cropWidth), X, Y, cropWidth, cropHeight, GraphicsUnit.Pixel);
437                     Image displayImage = new Bitmap(b, maxWidth, maxHeight);
438                     SaveImage(displayImage, newFileName, GetCodecInfo("image/" + GetFormat(newFileName).ToString().ToLower()));
439                     return true;
440                 }
441             }
442             catch (System.Exception e)
443             {
444                 throw e;
445             }
446             finally
447             {
448                 originalImage.Dispose();
449                 b.Dispose();
450             }
451         }
452         #endregion
453 
454         /// <summary>
455         /// 制作远程缩略图
456         /// </summary>
457         /// <param name="url">图片URL</param>
458         /// <param name="newFileName">新图路径</param>
459         /// <param name="maxWidth">最大宽度</param>
460         /// <param name="maxHeight">最大高度</param>
461         public static void MakeRemoteThumbnailImage(string url, string newFileName, int maxWidth, int maxHeight)
462         {
463             Stream stream = GetRemoteImage(url);
464             if (stream == null)
465                 return;
466             Image original = Image.FromStream(stream);
467             stream.Close();
468             MakeThumbnailImage(original, newFileName, maxWidth, maxHeight);
469         }
470 
471         /// <summary>
472         /// 获取图片流
473         /// </summary>
474         /// <param name="url">图片URL</param>
475         /// <returns></returns>
476         private static Stream GetRemoteImage(string url)
477         {
478             HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
479             request.Method = "GET";
480             request.ContentLength = 0;
481             request.Timeout = 20000;
482             HttpWebResponse response = null;
483 
484             try
485             {
486                 response = (HttpWebResponse)request.GetResponse();
487                 return response.GetResponseStream();
488             }
489             catch
490             {
491                 return null;
492             }
493         }
494     }
495     /// <summary>
496     /// 水印构造类
497     /// </summary>
498     public class WaterMark
499     {
500         /// <summary>
501         /// 图片水印
502         /// </summary>
503         /// <param name="imgPath">服务器图片相对路径</param>
504         /// <param name="filename">保存文件名</param>
505         /// <param name="watermarkFilename">水印文件相对路径</param>
506         /// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下</param>
507         /// <param name="quality">附加水印图片质量,0-100</param>
508         /// <param name="watermarkTransparency">水印的透明度 1--10 10为不透明</param>
509         public static void AddImageSignPic(string imgPath, string filename, string watermarkFilename, int watermarkStatus, int quality, int watermarkTransparency)
510         {
511             if (!File.Exists(Utils.GetMapPath(imgPath)))
512                 return;
513             byte[] _ImageBytes = File.ReadAllBytes(Utils.GetMapPath(imgPath));
514             Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
515             filename = Utils.GetMapPath(filename);
516 
517             if (watermarkFilename.StartsWith("/") == false)
518                 watermarkFilename = "/" + watermarkFilename;
519             watermarkFilename = Utils.GetMapPath(watermarkFilename);
520             if (!File.Exists(watermarkFilename))
521                 return;
522             Graphics g = Graphics.FromImage(img);
523             //设置高质量插值法
524             //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
525             //设置高质量,低速度呈现平滑程度
526             //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
527             Image watermark = new Bitmap(watermarkFilename);
528 
529             if (watermark.Height >= img.Height || watermark.Width >= img.Width)
530                 return;
531 
532             ImageAttributes imageAttributes = new ImageAttributes();
533             ColorMap colorMap = new ColorMap();
534 
535             colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
536             colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);
537             ColorMap[] remapTable = { colorMap };
538 
539             imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
540 
541             float transparency = 0.5F;
542             if (watermarkTransparency >= 1 && watermarkTransparency <= 10)
543                 transparency = (watermarkTransparency / 10.0F);
544 
545 
546             float[][] colorMatrixElements = {
547                                                 new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},
548                                                 new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},
549                                                 new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},
550                                                 new float[] {0.0f,  0.0f,  0.0f,  transparency, 0.0f},
551                                                 new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}
552                                             };
553 
554             ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
555 
556             imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
557 
558             int xpos = 0;
559             int ypos = 0;
560 
561             switch (watermarkStatus)
562             {
563                 case 1:
564                     xpos = (int)(img.Width * (float).01);
565                     ypos = (int)(img.Height * (float).01);
566                     break;
567                 case 2:
568                     xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
569                     ypos = (int)(img.Height * (float).01);
570                     break;
571                 case 3:
572                     xpos = (int)((img.Width * (float).99) - (watermark.Width));
573                     ypos = (int)(img.Height * (float).01);
574                     break;
575                 case 4:
576                     xpos = (int)(img.Width * (float).01);
577                     ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
578                     break;
579                 case 5:
580                     xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
581                     ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
582                     break;
583                 case 6:
584                     xpos = (int)((img.Width * (float).99) - (watermark.Width));
585                     ypos = (int)((img.Height * (float).50) - (watermark.Height / 2));
586                     break;
587                 case 7:
588                     xpos = (int)(img.Width * (float).01);
589                     ypos = (int)((img.Height * (float).99) - watermark.Height);
590                     break;
591                 case 8:
592                     xpos = (int)((img.Width * (float).50) - (watermark.Width / 2));
593                     ypos = (int)((img.Height * (float).99) - watermark.Height);
594                     break;
595                 case 9:
596                     xpos = (int)((img.Width * (float).99) - (watermark.Width));
597                     ypos = (int)((img.Height * (float).99) - watermark.Height);
598                     break;
599             }
600 
601             g.DrawImage(watermark, new Rectangle(xpos, ypos, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, imageAttributes);
602 
603             ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
604             ImageCodecInfo ici = null;
605             foreach (ImageCodecInfo codec in codecs)
606             {
607                 if (codec.MimeType.IndexOf("jpeg") > -1)
608                     ici = codec;
609             }
610             EncoderParameters encoderParams = new EncoderParameters();
611             long[] qualityParam = new long[1];
612             if (quality < 0 || quality > 100)
613                 quality = 80;
614 
615             qualityParam[0] = quality;
616 
617             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
618             encoderParams.Param[0] = encoderParam;
619 
620             if (ici != null)
621                 img.Save(filename, ici, encoderParams);
622             else
623                 img.Save(filename);
624 
625             g.Dispose();
626             img.Dispose();
627             watermark.Dispose();
628             imageAttributes.Dispose();
629         }
630 
631         /// <summary>
632         /// 文字水印
633         /// </summary>
634         /// <param name="imgPath">服务器图片相对路径</param>
635         /// <param name="filename">保存文件名</param>
636         /// <param name="watermarkText">水印文字</param>
637         /// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中  9=右下</param>
638         /// <param name="quality">附加水印图片质量,0-100</param>
639         /// <param name="fontname">字体</param>
640         /// <param name="fontsize">字体大小</param>
641         public static void AddImageSignText(string imgPath, string filename, string watermarkText, int watermarkStatus, int quality, string fontname, int fontsize)
642         {
643             byte[] _ImageBytes = File.ReadAllBytes(Utils.GetMapPath(imgPath));
644             Image img = Image.FromStream(new System.IO.MemoryStream(_ImageBytes));
645             filename = Utils.GetMapPath(filename);
646 
647             Graphics g = Graphics.FromImage(img);
648             Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
649             SizeF crSize;
650             crSize = g.MeasureString(watermarkText, drawFont);
651 
652             float xpos = 0;
653             float ypos = 0;
654 
655             switch (watermarkStatus)
656             {
657                 case 1:
658                     xpos = (float)img.Width * (float).01;
659                     ypos = (float)img.Height * (float).01;
660                     break;
661                 case 2:
662                     xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
663                     ypos = (float)img.Height * (float).01;
664                     break;
665                 case 3:
666                     xpos = ((float)img.Width * (float).99) - crSize.Width;
667                     ypos = (float)img.Height * (float).01;
668                     break;
669                 case 4:
670                     xpos = (float)img.Width * (float).01;
671                     ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
672                     break;
673                 case 5:
674                     xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
675                     ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
676                     break;
677                 case 6:
678                     xpos = ((float)img.Width * (float).99) - crSize.Width;
679                     ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
680                     break;
681                 case 7:
682                     xpos = (float)img.Width * (float).01;
683                     ypos = ((float)img.Height * (float).99) - crSize.Height;
684                     break;
685                 case 8:
686                     xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
687                     ypos = ((float)img.Height * (float).99) - crSize.Height;
688                     break;
689                 case 9:
690                     xpos = ((float)img.Width * (float).99) - crSize.Width;
691                     ypos = ((float)img.Height * (float).99) - crSize.Height;
692                     break;
693             }
694 
695             g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);
696             g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Yellow), xpos, ypos);
697 
698             ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
699             ImageCodecInfo ici = null;
700             foreach (ImageCodecInfo codec in codecs)
701             {
702                 if (codec.MimeType.IndexOf("jpeg") > -1)
703                     ici = codec;
704             }
705             EncoderParameters encoderParams = new EncoderParameters();
706             long[] qualityParam = new long[1];
707             if (quality < 0 || quality > 100)
708                 quality = 80;
709 
710             qualityParam[0] = quality;
711 
712             EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
713             encoderParams.Param[0] = encoderParam;
714 
715             if (ici != null)
716                 img.Save(filename, ici, encoderParams);
717             else
718                 img.Save(filename);
719 
720             g.Dispose();
721             img.Dispose();
722         }
723     }

3、6 通过路径获取文件方法

 1 /// <summary>
 2         /// 通过路径获取文件
 3         /// </summary>
 4         /// <returns></returns>
 5         public ActionResult GetFileData()
 6         {
 7             string path = Request.Form["path"];
 8             var jsonM = new JsonHelper() { Status = "y", Msg = "success" };
 9             try
10             {
11                 if (!FileHelper.IsExistDirectory(Server.MapPath(path)))
12                 {
13                     jsonM.Status = "n";
14                     jsonM.Msg = "目录不存在!";
15                 }
16                 else if (FileHelper.IsEmptyDirectory(Server.MapPath(path)))
17                 {
18                     jsonM.Status = "empty";
19                 }
20                 else
21                 {
22                     jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetFileTable(Server.MapPath(path))).OrderByDescending(p => p.name).ToList();
23                 }
24             }
25             catch (Exception)
26             {
27                 jsonM.Status = "err";
28                 jsonM.Msg = "获取文件失败!";
29             }
30             return Content(JsonConverter.Serialize(jsonM, true));
31         }

3.8 FileHelper中的获取文件的方法

 1  /// <summary>
 2         /// 读取指定位置文件列表到集合中
 3         /// </summary>
 4         /// <param name="Path">指定路径</param>
 5         /// <returns></returns>
 6         public static DataTable GetFileTable(string Path)
 7         {
 8             DataTable dt = new DataTable();
 9             dt.Columns.Add("name", typeof(string));
10             dt.Columns.Add("ext", typeof(string));
11             dt.Columns.Add("size", typeof(string));
12             dt.Columns.Add("icon", typeof(string));
13             dt.Columns.Add("isfolder", typeof(bool));
14             dt.Columns.Add("isImage", typeof(bool));
15             dt.Columns.Add("fullname", typeof(string));
16             dt.Columns.Add("path", typeof(string));
17             dt.Columns.Add("time", typeof(DateTime));
18 
19             DirectoryInfo dirinfo = new DirectoryInfo(Path);
20             FileInfo fi;
21             DirectoryInfo dir;
22             string FileName = string.Empty, FileExt = string.Empty, FileSize = string.Empty, FileIcon = string.Empty, FileFullName = string.Empty, FilePath = string.Empty;
23             bool IsFloder = false, IsImage = false;
24             DateTime FileModify;
25             try
26             {
27                 foreach (FileSystemInfo fsi in dirinfo.GetFileSystemInfos())
28                 {
29                     if (fsi is FileInfo)
30                     {
31                         fi = (FileInfo)fsi;
32                         //获取文件名称
33                         FileName = fi.Name.Substring(0, fi.Name.LastIndexOf(.));
34                         FileFullName = fi.Name;
35                         //获取文件扩展名
36                         FileExt = fi.Extension;
37                         //获取文件大小
38                         FileSize = GetDiyFileSize(fi);
39                         //获取文件最后修改时间
40                         FileModify = fi.LastWriteTime;
41                         //文件图标
42                         FileIcon = GetFileIcon(FileExt);
43                         //是否为图片
44                         IsImage = IsImageFile(FileExt.Substring(1, FileExt.Length - 1));
45                         //文件路径
46                         FilePath = urlconvertor(fi.FullName);
47                     }
48                     else
49                     {
50                         dir = (DirectoryInfo)fsi;
51                         //获取目录名
52                         FileName = dir.Name;
53                         //获取目录最后修改时间
54                         FileModify = dir.LastWriteTime;
55                         //设置目录文件为文件夹
56                         FileExt = "folder";
57                         //文件夹图标
58                         FileIcon = "fa fa-folder";
59                         IsFloder = true;
60                         //文件路径
61                         FilePath = urlconvertor(dir.FullName);
62 
63                     }
64                     DataRow dr = dt.NewRow();
65                     dr["name"] = FileName;
66                     dr["fullname"] = FileFullName;
67                     dr["ext"] = FileExt;
68                     dr["size"] = FileSize;
69                     dr["time"] = FileModify;
70                     dr["icon"] = FileIcon;
71                     dr["isfolder"] = IsFloder;
72                     dr["isImage"] = IsImage;
73                     dr["path"] = FilePath;
74                     dt.Rows.Add(dr);
75                 }
76             }
77             catch (Exception e)
78             {
79 
80                 throw e;
81             }
82             return dt;
83         }

 

 

原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 (11)文件管理

标签:

原文地址:http://www.cnblogs.com/yuangang/p/5629654.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!