zoukankan      html  css  js  c++  java
  • 【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 <= 0)
            {
                return new ResponseUploadMessage() { error = 1, message = "上传文件不能为空" };
            }
    
            if (req.dir == UploadFileType.image && req.imgFile.ContentType.IndexOf("image/") == -1)
            {
                return new ResponseUploadMessage() { error = 1, message = "上传图片格式错误" };
            }
    
            if (String.IsNullOrEmpty(req.savePath))
            {
                return new ResponseUploadMessage() { error = 1, 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(1000, 9999) + fileExtensions;
    
            string fullPath = Path.Combine(req.savePath, newFileName);
            req.imgFile.SaveAs(fullPath);
    
            return new ResponseUploadMessage() { error = 0, 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 = 0; i < dirList.Length; i++)
            {
                DirectoryInfo dir1 = new DirectoryInfo(dirList[i]);
                FileList theDir = new FileList();
                theDir.is_dir = true;
                theDir.has_file = (dir1.GetFileSystemInfos().Length > 0);
                theDir.filesize = 0;
                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 = 0; 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(1).ToLower()) >= 0;
                theFile.filetype = file.Extension.Substring(1);
                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 = 0,  //图片
        file = 1,   //文件
        flash = 2,  //flash
        media = 3   //多媒体
    }

    空间管理排序类

    /// <summary>
    /// 用于kineditor文本编辑器  文件名排序
    /// </summary>
    public class NameSorter : IComparer
    {
        public int Compare(object x, object y)
        {
            if (x == null && y == null)
            {
                return 0;
            }
            if (x == null)
            {
                return -1;
            }
            if (y == null)
            {
                return 1;
            }
            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 0;
            }
            if (x == null)
            {
                return -1;
            }
            if (y == null)
            {
                return 1;
            }
            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 0;
            }
            if (x == null)
            {
                return -1;
            }
            if (y == null)
            {
                return 1;
            }
            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 0;
            }
            if (x == null)
            {
                return -1;
            }
            if (y == null)
            {
                return 1;
            }
            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:
    ichtextbox{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:
    ichtextbox{0}", model.dir.ToString());
    
            ResponseManageMessage result = KindeditorHelper.Manage(model);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
  • 相关阅读:
    获取程序的当前启动路径
    SuspendLayout,ResumeLayout,Layout,PerformLayout
    序列化反序列化的简单例子
    简单的异步编程入门例子
    ClickOnce的更新策略
    ubuntu update(国内升级源)
    为AptGet设置代理
    如何启用 Ubuntu 中的 root 帐号
    The Great Tunnel Debate: PBT vs TMPLS
    Traffic engineering for Ethernet: PBT vs. TMPLS
  • 原文地址:https://www.cnblogs.com/weiweixiang/p/10120159.html
Copyright © 2011-2022 走看看