【Kindeditor编辑器】 文件上传、空间管理
包括图片上传、文件上传、Flash上传、多媒体上传、空间管理(图片空间、文件空间等等)
一、编辑器相关参数

二、简单的封装类
这里只是做了简单的封装,欢迎大家指点改正。
public class KindeditorHelper
{
/// <summary>
/// 上传
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public static ResponseUploadMessage Upload(RequestUploadMessage req)
{
if (req.imgFile == null || req.imgFile.ContentLength <= )
{
return new ResponseUploadMessage() { error = , message = "上传文件不能为空" };
} if (req.dir == UploadFileType.image && req.imgFile.ContentType.IndexOf("image/") == -)
{
return new ResponseUploadMessage() { error = , message = "上传图片格式错误" };
} if (String.IsNullOrEmpty(req.savePath))
{
return new ResponseUploadMessage() { error = , message = "保存文件夹不能为空" };
} //保存文件夹不存在就创建
if (Directory.Exists(req.savePath) == false)
{
Directory.CreateDirectory(req.savePath);
} string fileExtensions = Path.GetExtension(req.imgFile.FileName);
string newFileName = DateTime.Now.ToString("yyyyMMddHHmmssss") + new Random(Guid.NewGuid().GetHashCode()).Next(, ) + fileExtensions; string fullPath = Path.Combine(req.savePath, newFileName);
req.imgFile.SaveAs(fullPath); return new ResponseUploadMessage() { error = , url = req.webUrl + newFileName };
} /// <summary>
/// 空间管理
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public static ResponseManageMessage Manage(RequestManageMessage req)
{
string[] fileTypes = new string[] { "gif", "jpg", "jpeg", "png", "bmp" }; //图片后缀名
string currentPath = ""; //当前文件路径
string currentUrl = ""; //当前URL路径
string currentDirPath = ""; //当前文件夹路径
string moveupDirPath = ""; //上一级文件夹路径 string dirPath = req.savePath;
string webUrl = req.webUrl;
string path = req.path; if (String.IsNullOrEmpty(path))
{
path = "";
} if (Directory.Exists(dirPath) == false)
{
Directory.CreateDirectory(dirPath); //保存文件夹不存在就创建
} if (path == "")
{
currentPath = dirPath;
currentUrl = webUrl;
currentDirPath = "";
moveupDirPath = "";
}
else
{
currentPath = dirPath + path;
currentUrl = webUrl + path;
currentDirPath = path;
moveupDirPath = Regex.Replace(currentDirPath, @"(.*?)[^\/]+\/$", "$1");
} //不允许使用..移动到上一级目录
if (Regex.IsMatch(path, @"\.\."))
{
HttpContext.Current.Response.Write("Access is not allowed.");
HttpContext.Current.Response.End();
} //最后一个字符不是/
if (path != "" && !path.EndsWith("/"))
{
HttpContext.Current.Response.Write("Parameter is not valid.");
HttpContext.Current.Response.End(); } //目录不存在或不是目录
if (Directory.Exists(currentPath) == false)
{
HttpContext.Current.Response.Write("Directory does not exist.");
HttpContext.Current.Response.End();
} string[] dirList = Directory.GetDirectories(currentPath);
string[] fileList = Directory.GetFiles(currentPath); switch (req.order)
{
case "SIZE":
Array.Sort(dirList, new NameSorter());
Array.Sort(fileList, new SizeSorter());
break;
case "TYPE":
Array.Sort(dirList, new NameSorter());
Array.Sort(fileList, new TypeSorter());
break;
case "NAME":
Array.Sort(dirList, new NameSorter());
Array.Sort(fileList, new NameSorter());
break;
case "TIME":
Array.Sort(dirList, new TimeSorter());
Array.Sort(fileList, new TimeSorter());
break;
} ResponseManageMessage res = new ResponseManageMessage();
res.moveup_dir_path = moveupDirPath;
res.current_dir_path = currentDirPath;
res.current_url = currentUrl;
res.total_count = dirList.Length + fileList.Length; for (int i = ; i < dirList.Length; i++)
{
DirectoryInfo dir1 = new DirectoryInfo(dirList[i]);
FileList theDir = new FileList();
theDir.is_dir = true;
theDir.has_file = (dir1.GetFileSystemInfos().Length > );
theDir.filesize = ;
theDir.is_photo = false;
theDir.filetype = "";
theDir.filename = dir1.Name;
theDir.datetime = dir1.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
res.file_list.Add(theDir);
} for (int i = ; i < fileList.Length; i++)
{
FileInfo file = new FileInfo(fileList[i]);
FileList theFile = new FileList();
theFile.is_dir = false;
theFile.has_file = false;
theFile.filesize = file.Length;
theFile.is_photo = Array.IndexOf(fileTypes, file.Extension.Substring().ToLower()) >= ;
theFile.filetype = file.Extension.Substring();
theFile.filename = file.Name;
theFile.datetime = file.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
res.file_list.Add(theFile);
} return res;
}
}
RequestUploadMessage类
/// <summary>
/// 上传请求类
/// </summary>
public class RequestUploadMessage
{
/// <summary>
/// 类型
/// </summary>
public UploadFileType dir { get; set; } /// <summary>
/// 本地地址
/// </summary>
public string localUrl { get; set; } /// <summary>
/// 上传文件
/// </summary>
public HttpPostedFileBase imgFile { get; set; } /// <summary>
/// 保存文件夹路径
/// </summary>
public string savePath { get; set; } /// <summary>
/// Url地址
/// </summary>
public string webUrl { get; set; }
}
ResponseUploadMessage类
/// <summary>
/// 上传结果类
/// </summary>
public class ResponseUploadMessage
{
/// <summary>
/// 结果码 0成功 1失败
/// </summary>
public int error { get; set; } /// <summary>
/// 信息
/// </summary>
public string message { get; set; } /// <summary>
/// Url地址
/// </summary>
public string url { get; set; }
}
RequestManageMessage类
/// <summary>
/// 空间管理类
/// </summary>
public class RequestManageMessage
{
/// <summary>
/// 类型
/// </summary>
public UploadFileType dir { get; set; } /// <summary>
/// 排序
/// </summary>
public string order { get; set; } /// <summary>
/// 路径
/// </summary>
public string path { get; set; } /// <summary>
/// 文件夹路径 物理路径
/// </summary>
public string savePath { get; set; } /// <summary>
/// URL
/// </summary>
public string webUrl { get; set; }
}
ResponseManageMessage类
public class ResponseManageMessage
{
/// <summary>
/// 上一级文件夹路径
/// </summary>
public string moveup_dir_path { get; set; } /// <summary>
/// 当前文件夹路径
/// </summary>
public string current_dir_path { get; set; } /// <summary>
/// 当前URL地址
/// </summary>
public string current_url { get; set; } /// <summary>
/// 总数量 包括文件夹、文件
/// </summary>
public int total_count { get; set; } /// <summary>
/// 文件列表 包括文件夹
/// </summary>
public List<FileList> file_list { get; set; } public ResponseManageMessage()
{
file_list = new List<FileList>();
}
} public class FileList
{
/// <summary>
/// 是否文件夹
/// </summary>
public bool is_dir { get; set; } /// <summary>
/// 是否有文件 就是这个文件夹里有文件吗
/// </summary>
public bool has_file { get; set; } /// <summary>
/// 文件大小 文件夹为0
/// </summary>
public long filesize { get; set; } /// <summary>
/// 是否图片
/// </summary>
public bool is_photo { get; set; } /// <summary>
/// 文件类型
/// </summary>
public string filetype { get; set; } /// <summary>
/// 文件名
/// </summary>
public string filename { get; set; } /// <summary>
/// 最后一次修改日期
/// </summary>
public string datetime { get; set; }
}
UploadFileType类
public enum UploadFileType
{
image = , //图片
file = , //文件
flash = , //flash
media = //多媒体
}
空间管理排序类
/// <summary>
/// 用于kineditor文本编辑器 文件名排序
/// </summary>
public class NameSorter : IComparer
{
public int Compare(object x, object y)
{
if (x == null && y == null)
{
return ;
}
if (x == null)
{
return -;
}
if (y == null)
{
return ;
}
FileInfo xInfo = new FileInfo(x.ToString());
FileInfo yInfo = new FileInfo(y.ToString()); return xInfo.FullName.CompareTo(yInfo.FullName);
}
} /// <summary>
/// 用于kineditor文本编辑器 文件大小排序
/// </summary>
public class SizeSorter : IComparer
{
public int Compare(object x, object y)
{
if (x == null && y == null)
{
return ;
}
if (x == null)
{
return -;
}
if (y == null)
{
return ;
}
FileInfo xInfo = new FileInfo(x.ToString());
FileInfo yInfo = new FileInfo(y.ToString()); return xInfo.Length.CompareTo(yInfo.Length);
}
} /// <summary>
/// 用于kineditor文本编辑器 文件类型大小排序
/// </summary>
public class TypeSorter : IComparer
{
public int Compare(object x, object y)
{
if (x == null && y == null)
{
return ;
}
if (x == null)
{
return -;
}
if (y == null)
{
return ;
}
FileInfo xInfo = new FileInfo(x.ToString());
FileInfo yInfo = new FileInfo(y.ToString()); return xInfo.Extension.CompareTo(yInfo.Extension);
}
} public class TimeSorter : IComparer
{
public int Compare(object x, object y)
{
if (x == null && y == null)
{
return ;
}
if (x == null)
{
return -;
}
if (y == null)
{
return ;
}
FileInfo xInfo = new FileInfo(x.ToString());
FileInfo yInfo = new FileInfo(y.ToString()); return xInfo.LastWriteTime.CompareTo(yInfo.LastWriteTime);
}
}
三、使用
public JsonResult Upload(RequestUploadMessage model)
{
model.savePath = String.Format(@"f:\richtextbox\{0}\", model.dir.ToString());
model.webUrl = String.Format("http://localhost:52527/richtextbox/{0}/", model.dir.ToString());
ResponseUploadMessage result = KindeditorHelper.Upload(model);
return Json(result, JsonRequestBehavior.DenyGet);
} public JsonResult FileManager(RequestManageMessage model)
{
model.webUrl = String.Format("http://localhost:52527/richtextbox/{0}/", model.dir.ToString());
model.savePath = String.Format(@"f:\richtextbox\{0}\", model.dir.ToString()); ResponseManageMessage result = KindeditorHelper.Manage(model);
return Json(result, JsonRequestBehavior.AllowGet);
}
【Kindeditor编辑器】 文件上传、空间管理的更多相关文章
- nodejs+express-实现文件上传下载管理的网站
Nodejs+Express-实现文件上传下载管理的网站 项目Github地址(对你有帮助记得给星哟):https://github.com/qcer/updo 后端:基于nodejs的express ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- jquery插件课程2 放大镜、多文件上传和在线编辑器插件如何使用
jquery插件课程2 放大镜.多文件上传和在线编辑器插件如何使用 一.总结 一句话总结:插件使用真的还是比较简单的,引包,初始化,配置参数(json),配置数据(json),而后两步不是必须的.而且 ...
- Web安全-之文件上传漏洞场景
1 上传漏洞危害介绍 上传是Web中最常见的功能,如果上传功能存在设计.编码缺陷,就容易形成上传漏洞,从而成为致命的安全问题,攻击者可以通过上传脚本木马,实现查看/篡改/删除源码和任意涂鸦网页,可 ...
- [红日安全]Web安全Day5 - 任意文件上传实战攻防
本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...
- JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用
0 ajaxFileUpload简介 ajaxFileUpload插件是一个非常简单的基于Jquery的异步上传文件的插件,使用过程中发现很多与这个同名的,基于原始版本基础之上修改过的插件,文件版本比 ...
- SpringMVC文件上传下载
在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...
- ajaxFileUpload文件上传
一.简介 ajaxFileUpload是一种异步的文件上传控件,通过ajax进行文件上传,并获取上传处理结果.在很多时候我们需要使用到文件上传的功能,但是不需要使用那些强大的上传插件.此时就可以使用a ...
- 文件上传ajaxfileupload.js插件
Html: <div class="container"> <form id="form" runat="serv ...
- java文件上传--基于ajaxFileUpload+struts2
jQuery插件ajaxFileUpload可以实现ajax文件上传,使用非常简单. 下面做一个简单的demo(以上传图片为例),实现图片上传,图片显示,图片下载 注:以下的代码是在项目的基础上进行开 ...
随机推荐
- LuoguP1226 【模板】快速幂||取余运算
题目链接:https://www.luogu.org/problemnew/show/P1226 第一次学快速幂,将别人对快速幂原理的解释简要概括一下: 计算a^b时,直接乘的话计算次数为b,而快速幂 ...
- 关于Python的OSError和IOError
参考:http://stackoverflow.com/questions/29347790/difference-between-ioerror-and-oserror 在3.x版本已经移除,剩下O ...
- ROS Learning-008 beginner_Tutorials ROS话题
ROS Indigo beginner_Tutorials-07 ROS话题 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...
- golang开发集训营
初识golang Go与VScode开发工具 Golang开门见山
- 如何将硕大笨重的git仓库拆分成灵活轻巧的模块小仓库
方法1.拆分一个子目录为独立仓库 参考链接:https://segmentfault.com/a/1190000002548731 以前是用 filter-branch 来实现,这个需求太常见了,有人 ...
- 开发中常遇到的Python陷阱和注意点-乾颐堂
最近使用Python的过程中遇到了一些坑,例如用datetime.datetime.now()这个可变对象作为函数的默认参数,模块循环依赖等等. 在此记录一下,方便以后查询和补充. 避免可变对象作为默 ...
- JDK 泛型之 Type
JDK 泛型之 Type 一.Type 接口 JDK 1.5 引入 Type,主要是为了泛型,没有泛型的之前,只有所谓的原始类型.此时,所有的原始类型都通过字节码文件类 Class 类进行抽象.Cla ...
- Bootstrap验证
<div class="modal fade" id="myModal" tabindex="-1" role="dialo ...
- 二进制搭建kubernetes多master集群【一、使用TLS证书搭建etcd集群】
上一篇我们介绍了kubernetes集群架构以及系统参数配置,参考:二进制搭建kubernetes多master集群[开篇.集群环境和功能介绍] 下面本文etcd集群才用三台centos7.5搭建完成 ...
- 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...