FCKeditor 上传自动重命名、按月创建文件夹和基本操作

现在做的项目,用到了编辑器,而FCK都出到了2.6.3所以就把他改成自己想要的,发现跟原来的不一样了,还要重新找,现在就把过程发给大家分享一下吧!

一、自定义 FCKeditor 的 BasePath

BasePath 即FCKeditor在网站中的相对路径,默认值是 /fckeditor/,最好在Web.config appSettings中对其进行配置:

<add key="FCKeditor:BasePath" value="/FCKeditor_2.6.3/"/>

 

这样做有诸多优点:
 •开发环境与生产环境不同,开发环境一般是http://localhost/xxx.com/这种情况下FCKeditor就得放在一个虚拟目录http://localhost/fckeditor/中,若涉及多个网站的开发,而各网站的FCKeditor有差别时,这样显然不是最优;
而且因为物理目录结构与逻辑目录结构不同,也会有发生错误的隐患;
而如果采用Web.config的配置,就可以在开发环境采用不同的配置,FCKeditor的物理路径与生产环境保持一致;
•当升级FCKeditor时,只需要将新版本的FCKeditor放在相应版本号的目录里,修改一下配置即可。这样可以解决因为静态资源的客户端缓存问题,不同用户出现不同的错误的问题;
•可以直观地看到自己的FCKeditor的版本号。

 

二、配置文件上传的目录
 
FCKeditor的文件上传(如图片上传)目录可以通过Web.config appSettings进行配置,如:

<add key="FCKeditor:UserFilesPath" value="/UploadFile/FCKeditor/"/>

 

也可以在 /FCKeditorBasePath/editor/filemanager/connectors/aspx/config.ascx 中进行配置,但我建议 FCKeditor 目录中的内容能不改就不改(fckconfig.js除外),这样日后升级可以放心地替换即可。
 
三、FCKeditor的安全性

在FCKeditor的2.3.2版本里,曾有一个漏洞,可以通过 /editor/filemanager/browser/default/connectors/aspx/connector.aspx 往服务器上传任意文件,我的网站就曾经中招。
 
2.6.3虽然暂未发现类似的问题,但一般情况下用不到的文件最好还是删除比较好:
 •FCKeditor BasePath 根目录中除了保留: •/editor
•/fckconfig.js
•/fckpackager.xml
•/fckstyles.xml
•/fcktemplates.xml
•/license.txt
外,全部删除


•/editor/filemanager/connectors中除了保留: •/aspx/config.ascx
•/aspx/upload.aspx
•/aspx/connector.aspx
外,全部删除


•删除 /editor/_source/


•/editor/filemanager/connectors/aspx/config.ascx 的 CheckAuthentication() 方法中,增加验证用户是否登录的逻辑

四、上传所有东西按年-月的格式存储
 
(他的两种上传模式是放在两个目录下的,快捷模式是放在UploadFiles下,而浏览模式是在此目录下创建对应的文件类型文件夹,我很不喜欢,所以就都改在一个目录下了!)
 
  在 /editor/filemanager/connectors/aspx/config.ascx文件中修改SetConfig()方法,改后的代码如下:

 

TypeConfig[ "File" ].AllowedExtensions            = new string[] { "7z", "aiff", "asf", "avi", "bmp", "csv", "doc", "fla", "flv", "gif", "gz", "gzip", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "ods", "odt", "pdf", "png", "ppt", "pxd", "qt", "ram", "rar", "rm", "rmi", "rmvb", "rtf", "sdc", "sitd", "swf", "sxc", "sxw", "tar", "tgz", "tif", "tiff", "txt", "vsd", "wav", "wma", "wmv", "xls", "xml", "zip" };
        TypeConfig[ "File" ].DeniedExtensions            = new string[] { };
        TypeConfig[ "File" ].FilesPath                    = "%UserFilesPath%file/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "File" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/" + DateTime.Now.ToString("yyyy-MM") + "/" );
        TypeConfig[ "File" ].QuickUploadPath            = "%UserFilesPath%file/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "File" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/" + DateTime.Now.ToString("yyyy-MM") + "/" );

        TypeConfig[ "Image" ].AllowedExtensions            = new string[] { "bmp", "gif", "jpeg", "jpg", "png" };
        TypeConfig[ "Image" ].DeniedExtensions            = new string[] { };
        TypeConfig[ "Image" ].FilesPath                    = "%UserFilesPath%image/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Image" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%image/" + DateTime.Now.ToString("yyyy-MM") + "/" );
        TypeConfig[ "Image" ].QuickUploadPath            = "%UserFilesPath%image/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Image" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%image/"  + DateTime.Now.ToString("yyyy-MM") + "/");

        TypeConfig[ "Flash" ].AllowedExtensions            = new string[] { "swf", "flv" };
        TypeConfig[ "Flash" ].DeniedExtensions            = new string[] { };
        TypeConfig[ "Flash" ].FilesPath                    = "%UserFilesPath%flash/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Flash" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%flash/" + DateTime.Now.ToString("yyyy-MM") + "/" );
        TypeConfig[ "Flash" ].QuickUploadPath            = "%UserFilesPath%flash/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Flash" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%flash/" + DateTime.Now.ToString("yyyy-MM") + "/" );

        TypeConfig[ "Media" ].AllowedExtensions            = new string[] { "aiff", "asf", "avi", "bmp", "fla", "flv", "gif", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "png", "qt", "ram", "rm", "rmi", "rmvb", "swf", "tif", "tiff", "wav", "wma", "wmv" };
        TypeConfig[ "Media" ].DeniedExtensions            = new string[] { };
        TypeConfig[ "Media" ].FilesPath                    = "%UserFilesPath%media/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Media" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%media/" + DateTime.Now.ToString("yyyy-MM") + "/" );
        TypeConfig[ "Media" ].QuickUploadPath            = "%UserFilesPath%media/" + DateTime.Now.ToString("yyyy-MM") + "/";
        TypeConfig[ "Media" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%media/" + DateTime.Now.ToString("yyyy-MM") + "/" );


 

效果我就不发了,肯定行。
 
 
 
四、上传所有东西重命名
 
 
 
 FCKeditor 的文件上传默认是不改名的,本地的文件名是什么,上传后保留原来的文件名;如果存在同名文件,则会被自动在文件名后面加 (n) 来标识。
 
FCKeditor For ASP.NET 的上传部分被编译到 DLL 文件里面了,所以只能通过修改源代码,再重新编译后方能使用。
 
使用:FCKeditor.Net_2.6.3.zip,asp.net 2.0版
 
找到项目中的FileBrowser/FileWorkerBase.cs


 

while ( true )
            {
                string sFilePath = System.IO.Path.Combine( sServerDir, sFileName );

                if ( System.IO.File.Exists( sFilePath ) )
                {
                    iCounter++;
                    sFileName =
                        System.IO.Path.GetFileNameWithoutExtension( oFile.FileName ) +
                        "(" + iCounter + ")." +
                        sExtension;

                    iErrorNumber = 201;
                }
                else
                {
                    oFile.SaveAs( sFilePath );
                    break;
                }
            }


 修改后的代码变成:

 

while (true)
                {
                    sFileName = DateTime.Now.ToString("yyyymmddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + "." + sExtension;//以时间命名文件

                    string sFilePath = System.IO.Path.Combine(sServerDir, sFileName);

                    oFile.SaveAs(sFilePath);
                    break;
                }


重新生成解决方案。在网站项目中删除旧的FredCK.FCKeditorV2.dll,再添加新的引用,就OK了。
 
四、上传图片带水印
 
在看代码之前先简单的介绍一下我的想法。我在自己的网站中建立了H2Blog.config文件,用于存放网站的一些配置信息,如水印的类型(文字型,图片型),是否需要加水印,文字型水印的文字内容等等和本文无关的重要配置信息。所以在如下带代码中,有一段是用来读取这些配置信息的。
在FileUpload方法中找到oFile.SaveAs( sFilePath );语句。在其后加入重新生成解决方案。在网站项目中删除旧的FredCK.FCKeditorV2.dll,再添加新的引用,就OK了。
 
四、上传图片带水印
 
在看代码之前先简单的介绍一下我的想法。我在自己的网站中建立了H2Blog.config文件,用于存放网站的一些配置信息,如水印的类型(文字型,图片型),是否需要加水印,文字型水印的文字内容等等和本文无关的重要配置信息。所以在如下带代码中,有一段是用来读取这些配置信息的。
在FileUpload方法中找到oFile.SaveAs( sFilePath );语句。在其后加入

try
                    {
                        DataSet configds = new DataSet();   //新建一个数据集实例
                        configds.ReadXml(Server.MapPath("~/H2Blog.config"));   //获得配置信息
                        DataTable configdt = configds.Tables[0];    //将数据装入表中
                        if (configdt.Rows[0]["Watermarkstatus"].ToString() == "0")  //如果水印状态信息为默认加水印的话
                        {
                            Image img = Image.FromFile(sFilePath);  //获得上传的图片文件
                            if (configdt.Rows[0]["Watermarktype"].ToString() == "0")    //如果水印类型为文字型
                            {
                                Graphics g = Graphics.FromImage(img);
                                g.DrawImage(img, 0, 0, img.Width, img.Height);
                                Font f = new Font("黑体", 20);
                                Brush b = new SolidBrush(Color.White);
                                string addText = configdt.Rows[0]["Watermarktext"].ToString();  //文件型水印的文字内容
                                g.DrawString(addText, f, b, img.Width - 150, img.Height - 35);  //在图片上显示的坐标,这个我只能写死,不知道有没有更好的办法
                                g.Dispose();
                            }
                            if (configdt.Rows[0]["Watermarktype"].ToString() == "1")    //如果水印类型为文字型
                            {
                                System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Server.MapPath("~/Images/watermark/watermark.gif"));
                                Graphics g = Graphics.FromImage(img);
                                g.DrawImage(copyImage, new Rectangle(img.Width - copyImage.Width, img.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
                                g.Dispose();
                            }
                            sFileName = System.IO.Path.GetFileNameWithoutExtension(oFile.FileName); //获得源文件名
                            string newPath = DateTime.Now.ToString("yyyymmddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + "." + sExtension; //以时间命名文件
                            sFileName = newPath;
                            newPath = System.IO.Path.Combine(sServerDir, newPath);  //组合地址
                            img.Save(newPath);  //保存加水印后图片
                            img.Dispose();
                            if (File.Exists(sFilePath))
                            {
                                File.Delete(sFilePath); //删除没上水印的老图
                            }
                        }
                    }
                    catch
                    {
                        this.SendFileUploadResponse(808, isQuickUpload);    //如果出错,没这一句的话,就没有报错了,只能看到一直要求你等待的状态
                    }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值