你的位置:首页 > ASP.net教程

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


声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!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       try10       {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         try40         {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 ><span ><i ></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       try10       {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       try18       {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       try18       {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       try18       {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       try18       {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 ><span ><i ></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         #endregion38 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           #endregion62 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 + "\",";  //上传文件ID70           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           #endregion75         }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       try12       {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       catch93       {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         else163         {164           factor = originalHeight / MAX_HEIGHT;165           newWidth = Convert.ToInt32(originalWidth / factor);166           newHeight = Convert.ToInt32(originalHeight / factor);167         }168       }169       else170       {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     #endregion201 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       else216         i = width;217 218       Bitmap b = new Bitmap(newSize, newSize);219 220       try221       {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         else233           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       finally238       {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         try285         {286           if (original.Width > maxWidth)287           {288             displayImage.Save(newFileName, original.RawFormat);289           }290         }291         finally292         {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             else359             {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         try373         {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         finally393         {394           originalImage.Dispose();395           b.Dispose();396         }397         return true;398       }399       else400       {401         originalImage.Dispose();402         return false;403       }404     }405     #endregion406 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       try425       {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       finally447       {448         originalImage.Dispose();449         b.Dispose();450       }451     }452     #endregion453 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       try485       {486         response = (HttpWebResponse)request.GetResponse();487         return response.GetResponseStream();488       }489       catch490       {491         return null;492       }493     }494   }495   /// <summary>496   /// 水印构造类497   /// </summary>498   public class WaterMark499   {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       else623         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       else718         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       try10       {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         else21         {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       try26       {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           else49           {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