索引
简述
文件管理,这个比较鸡肋 但是有些方法 大家可以参考下
项目准备
我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。
项目开始
其实叫文件管理呢有点过,这个功能比较鸡肋,但是大家可以参考一下一些方法
一、我们在ComManage区域下面新建个控制器 UploadControllers
1、1 我们新建一个视图Home,这里接收的fileExt就是左侧用户选择的文件类型
1 ///2 /// 文件管理默认页面 3 /// 4 ///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 ///2 /// 通过路径获取所有文件 3 /// 4 ///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 (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 (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 (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 (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 (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 (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 ///2 /// 文件名称 3 /// 4 public string name { get; set; } 5 ///6 /// 文件全称 7 /// 8 public string fullname { get; set; } 9 ///10 /// 文件路径11 /// 12 public string path { get; set; }13 ///14 /// 文件格式15 /// 16 public string ext { get; set; }17 ///18 /// 文件大小19 /// 20 public string size { get; set; }21 ///22 /// 文件图标23 /// 24 public string icon { get; set; }25 ///26 /// 是否为文件夹27 /// 28 public bool isfolder { get; set; }29 ///30 /// 是否为图片31 /// 32 public bool isImage { get; set; }33 ///34 /// 上传时间35 /// 36 public DateTime time { get; set; }
1、4 FileHelper类GetAllFileTable方法 我们把获得的文件数据转换成DataTable 返回回来
1 ///2 /// 获取目录下所有文件(包含子目录) 3 /// 4 /// 5 ///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 Listfloders = new List () { 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('没有找到任何文件'); 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 ///2 /// 删除文件或文件夹 3 /// 4 ///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 ///2 /// 复制文件到文件夹 3 /// 4 ///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 ///2 /// 移动文件到文件夹 3 /// 4 ///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 ///2 /// 压缩文件 3 /// 4 ///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 ///2 /// 解压文件 3 /// 4 ///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 有不太了解的朋友可以参考一下:
三、单文件上传
3、1 我们建一个上传视图页
1 ///2 /// 单文件上传视图3 /// 4 ///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('没有找到任何文件'); 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 ///2 /// 单个文件上传 3 /// 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 ///2 /// 文件上传方法 3 /// 4 /// 文件流 5 /// 是否生成缩略图 6 /// 是否生成水印 7 ///上传后文件信息 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 ///2 /// 缩略图构造类 3 /// 4 public class Thumbnail 5 { 6 private Image srcImage; 7 private string srcFileName; 8 9 ///10 /// 创建 11 /// 12 /// 原始图片路径 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 ///29 /// 回调 30 /// 31 ///32 public bool ThumbnailCallback() 33 { 34 return false; 35 } 36 37 /// 38 /// 生成缩略图,返回缩略图的Image对象 39 /// 40 /// 缩略图宽度 41 /// 缩略图高度 42 ///缩略图的Image对象 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 ///52 /// 保存缩略图 53 /// 54 /// 55 /// 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 ///76 /// 生成缩略图并保存 77 /// 78 /// 缩略图的宽度 79 /// 缩略图的高度 80 /// 保存的图像格式 81 ///缩略图的Image对象 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 ///98 /// 保存图片 99 /// 100 /// Image 对象101 /// 保存路径102 /// 指定格式的编解码参数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 ///113 /// 获取图像编码解码器的所有相关信息114 /// 115 /// 包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串116 ///返回图像编码解码器的所有相关信息 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 ///129 /// 计算新尺寸130 /// 131 /// 原始宽度132 /// 原始高度133 /// 最大新宽度134 /// 最大新高度135 ///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 /// 178 /// 得到图片格式179 /// 180 /// 文件名称181 ///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 /// 203 /// 制作小正方形204 /// 205 /// 图片对象206 /// 新地址207 /// 长度或宽度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 ///245 /// 制作小正方形246 /// 247 /// 图片文件名248 /// 新地址249 /// 长度或宽度250 public static void MakeSquareImage(string fileName, string newFileName, int newSize)251 {252 MakeSquareImage(Image.FromFile(fileName), newFileName, newSize);253 }254 255 ///256 /// 制作远程小正方形257 /// 258 /// 图片url259 /// 新地址260 /// 长度或宽度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 ///272 /// 制作缩略图273 /// 274 /// 图片对象275 /// 新图路径276 /// 最大宽度277 /// 最大高度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 ///299 /// 制作缩略图300 /// 301 /// 文件名302 /// 新图路径303 /// 最大宽度304 /// 最大高度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 ///320 /// 生成缩略图321 /// 322 /// 源图路径(绝对路径)323 /// 缩略图路径(绝对路径)324 /// 缩略图宽度325 /// 缩略图高度326 /// 生成缩略图的方式 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 ///409 /// 裁剪图片并保存410 /// 411 /// 源图路径(绝对路径)412 /// 缩略图路径(绝对路径)413 /// 缩略图宽度414 /// 缩略图高度415 /// 裁剪宽度416 /// 裁剪高度417 /// X轴418 /// Y轴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 ///455 /// 制作远程缩略图456 /// 457 /// 图片URL458 /// 新图路径459 /// 最大宽度460 /// 最大高度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 ///472 /// 获取图片流473 /// 474 /// 图片URL475 ///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 /// 496 /// 水印构造类497 /// 498 public class WaterMark499 {500 ///501 /// 图片水印502 /// 503 /// 服务器图片相对路径504 /// 保存文件名505 /// 水印文件相对路径506 /// 图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下507 /// 附加水印图片质量,0-100508 /// 水印的透明度 1--10 10为不透明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 ///632 /// 文字水印633 /// 634 /// 服务器图片相对路径635 /// 保存文件名636 /// 水印文字637 /// 图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下638 /// 附加水印图片质量,0-100639 /// 字体640 /// 字体大小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 ///2 /// 通过路径获取文件 3 /// 4 ///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 (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 ///2 /// 读取指定位置文件列表到集合中 3 /// 4 /// 指定路径 5 ///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 }
原创文章 转载请尊重劳动成果