【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:\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);
    }

猜你喜欢

转载自www.cnblogs.com/weiweixiang/p/10120159.html