朱博的技术园

关注基于.Net的Web解决方案,高性能数据库设计,高性能Web服务解决方案

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  14 随笔 :: 0 文章 :: 201 评论 :: 3 引用

前言

FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录自定义文件名上传图片的后期处理等)、以及安全性进行初步的阐述。

希望能帮助有同样需求的同仁节省一点时间;也希望各位能指正其中的不足。谢谢。

 

一、自定义 FCKeditor 的 BasePath

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

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


这样做有诸多优点:

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


二、配置文件上传的目录

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

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


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


三、自定义文件上传的子目录的格式

我们知道,一个文件夹下面不能存放过多的文件(据称Windows下面的目录下2000为阈值),否则对该目录的访问会严重影响I/O性能。而FCKeditor的文件存储是在单一的一个目录进行的。我对FCKeditor进行了扩展,可以在Web.config appSettings对存储目录的格式自定义,如:

<add key="FCKeditor:FolderPattern" value="%y/%m-%d/"/>


========================================
以今天的日期为例:这样产生的文件上传子目录格式为:2008/10-21/。
年月日格式的目录可以随意组合,如:

<add key="FCKeditor:FolderPattern" value="%y/%m/%d/"/>

这样产生的文件上传子目录变成了2008/10/21/

========================================
还可以针对不同登录的用户,采用不同的上传子目录
Web.config 修改上传子目录的配置,增加%u表示不同用户使用基于其标识不同的上传子目录

<add key="FCKeditor:FolderPattern" value="%u/%y/%m/%d/"/>

FCKeditor_2.6.3\editor\filemanager\connectors\aspx\config.ascx 中增加获取当前登录用户标识的逻辑

public override void SetConfig()
{
#region Bochuh's Modification
// Identifier for logined user
// Leave blank for default user upload folder
LoginedUserIdentifier = "44";
// 这里替换成获取当前登录用户表示的代码
#endregion

//
……此文件中原来的代码
}

这样可以对不同用户,根据其登录后的标识(一般是用户ID),来使用不同的目录进行存储,如:7394/2008/10/21/(7394是当前登录用户的ID)

 

参考:

  • %u   代表 当前登录用户的标识
  • %y    代表 当前时间的年份
  • %m    代表 当前时间的月份
  • %d    代表 当前时间的日


四、自定义文件上传的文件名格式

FCKeditor对文件名的处理规则是:如果当前目录下没有重名文件,则上传后的文件名与用户PC上的文件名一致;若存在n个重名文件,则加入用户PC上的文件名是Example.xxx,上传后的文件名变为:Example(n).xxx

我的项目里要求对用户上传的文件名变成Guid的格式,所以我对FCKeditor也做了扩展,在Web.config appSettings可以对上传后文件的格式自定义,如:

 

<add key="FCKeditor:FilenamePattern" value="%guid.%extl"/>


这样的文件名如:a299e63a-7d2d-493d-bbb9-99162ef5b6b8.gif

参考:

  • %guid    代表 一个新的guid字符串
  • %fnl    代表 源文件名的小写
  • %fnu    代表 源文件名的大写
  • %extl    代表 源文件扩展名的小写
  • %extu    代表 源文件扩展名的大写


五、对上传图片进行缩放处理

用到FCKeditor图片上传功能的场景中,很多是内容的发表。内容中往往不需要几千像素大小的图片,比如我的项目中,文章区域最宽也就560像素,所以我做了一个扩展,在Web.config appSettings中可以对图片的最大宽度进行自定义:

<add key="FCKeditor:MaxWidthOfUploadedImg" value="560"/>


有了这段配置,上传后的图片的宽度都控制在了560像素及以内


六、自定义上传后图片URL中的域名

为了加快页面的渲染,我们可以把图片等静态资源放在一个独立的域名当中。但FCKeditor默认的图片上传后URL是相对路径,如图:

我增加了这个扩展,在Web.config appSettings可以配置上传后图片URL的域名,如:

<add key="FCKeditor:UploadedFilesDomain" value="http://a.cvimg.cn/"/>

 

如图:

 


七、解决上传文件名含有中文的文件时提示 "invalid file type" 的问题

这个问题只需要在Web.config中增加一段配置即可解决:

<location path="FCKeditor_2.6.3/editor/filemanager/connectors/aspx/upload.aspx">
    
<system.web>
        
<globalization requestEncoding="utf-8" responseEncoding="gb2312"/>
    
</system.web>
</location>


注意:

  1. responseEncoding是网站的默认编码
  2. FCKeditor_2.6.3是FCKeditor的BasePath


八、FCKeditor的安全性

在FCKeditor的2.3.2版本里,曾有一个漏洞,可以通过 /editor/filemanager/browser/default/connectors/aspx/connector.aspx 往服务器上传任意文件,我的网站就曾经中招。

2.6.3虽然暂未发现类似的问题,但一般情况下用不到的文件最好还是删除比较好:

  1. FCKeditor BasePath 根目录中除了保留:
    1. /editor
    2. /fckconfig.js
    3. /fckpackager.xml
    4. /fckstyles.xml
    5. /fcktemplates.xml
    6. /license.txt
    外,全部删除
  2. /editor/filemanager/中除了保留:
    1. /connectors/aspx/config.ascx
    2. /connectors/aspx/upload.aspx
    外,全部删除
  3. 删除 /editor/_source/
  4. /editor/filemanager/connectors/aspx/config.ascx 的 CheckAuthentication() 方法中,增加验证用户是否登录的逻辑

注意:以上措施仅适用于ASP.NET的网站,其他语言版本的网站未考虑。

附:基于FCKeditor.Net_2.6.3修改后的源码

SOURCE: http://files.cnblogs.com/zhubo/FCKeditor.Net_2.6.3_20090706.zip
BIN(.NET 2.0): http://files.cnblogs.com/zhubo/FredCK.FCKeditorV2_20090706.zip

  1. 对以下文件的指定行进行了修改,
    /FileBrowser/Config.cs  line 45, 116, 169
    /FileBrowser/FileWorkerBase.cs  line 68, 98, 110, 125, 278
  2. 所有修改的地方均包含在名为 "ZhuBo's Modification" 的代码块中,也可以通过搜索整个项目中的 "ZhuBo's Modification" 快速看到改动的地方,方便自己的扩展(比如可以设定图片的最大高度)

更新 at 2008-11-11

新增可选的根据用户标识让不同用户使用独自的图片上传子目录,参见上文中“三、自定义文件上传的子目录的格式”的更新部分。

新的源码与dll文件也已更新。

更新 at 2009-07-06

感谢新手中的新手的发现,修正了以下Bug:未配置FCKeditor:FolderPattern,或者FCKeditor:FolderPattern为空时,上传图片成功后的路径中多了一个"/"

posted on 2008-10-21 15:52 朱博 阅读(3114) 评论(64)  编辑 收藏 网摘

评论

#1楼 2008-10-21 16:19 张明海      
不错 下次就按照你这个这么用
  回复  引用  查看    

#2楼 2008-10-21 18:20 SvnHost[未注册用户]
不错
  回复  引用    

#3楼 2008-10-21 18:38 AlphaWu      
不错。我也对FckEditor进行了扩展,我主要扩展的是图片上传的时候添加水印和生产缩略图。
http://wupeng.cn/post/2008/10/15/FckEditor-enhance-the-image-upload-feature.aspx" target="_new">http://wupeng.cn/post/2008/10/15/FckEditor-enhance-the-image-upload-feature.aspx

  回复  引用  查看    

#4楼[楼主] 2008-10-21 18:50 朱博      
@AlphaWu
我看到你的了,你的更加侧重用户的选择,很棒。如果可以提供源码就更好了。

  回复  引用  查看    

#5楼 2008-10-21 20:30 自知      
关于安全的问题,主要是去掉源代码中的SetConfig()方法,并在config.ascx中去掉SetConfig()方法。如果可以在config.ascx中修改上传设置的话,危险始终会存在。
  回复  引用  查看    

#6楼[楼主] 2008-10-21 21:38 朱博      
@自知
谢谢你的意见。但我不是太明白,除了管理员,用户有可能修改config.ascx?还是有其他的攻击方式?麻烦明示,谢谢。

  回复  引用  查看    

#7楼 2008-10-21 21:57 菜菜灰      
谢谢,非常有用~~
  回复  引用  查看    

#8楼 2008-10-21 21:58 菜菜灰      
是否能讲一下,扩展其他的插件,如插入内框架,插入视频等等~~
  回复  引用  查看    

#9楼 2008-10-21 22:53 canbeing      
不错
不过有一点,如果有根据不同的用户来将文件传到不能目录的话,就还需要再改一个程序了。

  回复  引用  查看    

#10楼[楼主] 2008-10-21 23:15 朱博      
@菜菜灰
我暂时还没有遇到类似的需求,不过修改起来应该是同样的道理。你可以分析一下源码。

  回复  引用  查看    

#11楼[楼主] 2008-10-21 23:18 朱博      
@canbeing
不错的建议。的确是要改程序的,在文中第八点所讲:“config.ascx 的 CheckAuthentication() 方法中,增加验证用户是否登录的逻辑”,这里就可以把要上传的目录动态设定好。

当然,如果要做到普适,也可以做一个选项,比如FCKeditor:UniqueFolderForUsers为true时,才设定用户的目录。

  回复  引用  查看    

#12楼 2008-10-22 08:06 自知      
@朱博
如果服务器是自己公司专用的,只放自己公司的网站则问题不大
我们做的是通用产品,出过一些问题,所以我们就把这里修改了,当然fckeditor只是一个上传webshell的途径,服务器的安全设置才是最重要的。

  回复  引用  查看    

#13楼 2008-10-22 09:41 胡枫      
有个问题请教哦。比如我的网站使用fckeditor的目录是d:\abc\fckeditor\
我想上传到另外一个站点路径是d:\ccc\upload\这边。
需要怎么设置呢。如果用相对路径好像是访问不到的吧。两个不同的站点。不是同一个站点的。我试了试<add key="FCKeditor:UserFilesPath" value="../ccc/upload/fckeditor"/>这样是不行的。

  回复  引用  查看    

#14楼[楼主] 2008-10-22 11:06 朱博      
@自知
谢谢自知的答复。我当时服务器的目录权限做了,比如存放静态资源的目录不具有脚本执行权限,但后来发现FCKeditor的漏洞能让用户传文件到我网站的任意目录。之前做的安全配置直接无效,很是郁闷。

  回复  引用  查看    

#15楼[楼主] 2008-10-22 11:13 朱博      
@胡枫
这样配置的确是不行,因为你的目录访问符不能超过你的站点根目录。如果需要上传到网站外的目录,你可以这样:

网站A根目录:d:\abc\,URL:http://websiteB.com/
要上传到的网站B目录:d:\ccc\upload\,URL:http://websiteB.com/upload/

在网站A中配置一个虚拟目录指向网站B的目录,可以通过http://websiteA.com/upload/访问到实际位于网站B的目录" target="_new">http://websiteA.com/upload/访问到实际位于网站B的目录

以上配置完成后,把网站A FCKeditor:UserFilesPath 值设定为 /upload/:
<add key="FCKeditor:UserFilesPath" value="/upload/"/>

应该就可以了。

  回复  引用  查看    

#16楼 2008-10-22 12:52 zmxmiss      
如何在用户(多个个人用户)上传图片的时候,动态创建一个文件夹用来存放此个人用户的图片文件,当用户在插入图片和删除图片的时候也只能看到属于自己文件夹的图片,并管理他们的功能? 实现这个需要修改什么地方呢?

  回复  引用  查看    

#17楼 2008-10-22 13:50 Fishope      
有空的时候好好看看
  回复  引用  查看    

#18楼[楼主] 2008-10-22 13:53 朱博      
@zmxmiss
当前登录用户的唯一标识(比如ID)是可以获得的,在文中第八点所讲:“config.ascx 的 CheckAuthentication() 方法中”,你既可以实现检查用户是否登录成功的逻辑;又可以记录当前登录用户的唯一标识,然后把这个唯一标识作为构造上传子目录的一部分即可。

FCKeditor.Net项目中需要修改的文件应该是:
\FCKeditor.Net_2.6.3\FileBrowser\FileWorkerBase.cs
\FCKeditor.Net_2.6.3\FileBrowser\Config.cs

至于用户可以管理他上传的文件,这个我没有试过,不过基于上面的思想,也是可以做到的。
你可以研究一下FCKeditor.NET与FCKeditor的LinkBrowser、ImageBrowser、FlashBrowser的代码,应该会有办法。

  回复  引用  查看    

#19楼 2008-10-23 11:13 zmxmiss      
谢谢了 去看看
  回复  引用  查看    

#20楼 2008-10-31 16:50 LifeKiller      
提个建议。如果图片大小小于设定,那么应该就不要再重新拿 System.Drawing去画了。
  回复  引用  查看    

#21楼[楼主] 2008-10-31 16:58 朱博      
@LifeKiller
好建议,非常感谢。

  回复  引用  查看    

#22楼 2008-11-01 20:58 ZHAOYN[未注册用户]
请教一下。我想限制上传图片的大小控制在1M以内,应该怎么做。我用的是FCK2.6,在Dialog里的image/image.js里添加校验代码为什么不好用
就是new 一个image,然后指定src是本地路径,然后用image.fileSize始终是-1 ,不知道为什么,楼主能否给解决一下,另外我不想通过webConfig来限制大小,因为项目中其他部分也可能上传视频等。所以不能统一限制。

  回复  引用    

兄弟,你能不能把整个DEMO提供下,我以前用是的5版本的,你的功能确实很棒,但是我引用你给你的动态链接库,一直报错
  回复  引用    

朋友,原来是浏览器缓存的问题,晕的要死,我把IE缓存删除掉就可以了。现在我继续做你上面内容的操作看下
  回复  引用    

一切搞定,很棒。不过有个问题,能不能单独设置某个用户,比如有连个管理员的ID分别是55,56.那么能不能设置不通的管理员只能上传到自己的目录下,并且只能看下自己文件夹的文件?谢谢
  回复  引用    

补充下:FCKConfig.ImageBrowser = true ;和FCKConfig.FlashBrowser = true ;要是同时设置为false的话,就不能浏览文件了,不知道实现只能浏览自己的目录难不难?
  回复  引用    

忙疯掉了,问题差不多解决了。。。

protected string UserFilesPath
{
get
{
if ( sUserFilesPath == null )
{
// 第一回从Application["FCKeditor:UserFilesPath"] 中读取,如果没有尝试其它方式
sUserFilesPath = (string)Application["FCKeditor:UserFilesPath"] ;

// 第二回从Session["FCKeditor:UserFilesPath"] 中读取,如果没有尝试其它方式
if ( sUserFilesPath == null || sUserFilesPath.Length == 0 )
{
sUserFilesPath = (string)Session["FCKeditor:UserFilesPath"] ;

// 第三回从web.config中读取,如果没有尝试其它方式
if ( sUserFilesPath == null || sUserFilesPath.Length == 0 )
{
sUserFilesPath = System.Configuration.ConfigurationSettings.AppSettings["FCKeditor:UserFilesPath"] ;

// 第四回从DEFAULT_USER_FILES_PATH(这个变量在同文件中)中读取,如果没有尝试其它方式
if ( sUserFilesPath == null || sUserFilesPath.Length == 0 )
sUserFilesPath = DEFAULT_USER_FILES_PATH ;

// 第五回从网址参数ServerPath中读取
if ( sUserFilesPath == null || sUserFilesPath.Length == 0 )
{
sUserFilesPath = Request.QueryString["ServerPath"] ;
}

}
}

// Check that the user path ends with slash ("/")
if ( ! sUserFilesPath.EndsWith("/") )
sUserFilesPath += "/" ;
}
return sUserFilesPath ;
}
}
从上面的注释可以看到用户上传路径的顺序,只要在页面加载的时候设置下Session["FCKeditor:UserFilesPath"]就可以设置FCKeditor上用户上传路径了

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Session["FCKeditor:UserFilesPath"] = "/townfile/55/";
string sImageBrowserURL = "/townfile/55/";
FCKeditor1.ImageBrowserURL = sImageBrowserURL;
///这边的55代表多用户系统中一个用户的ID号。。。。
这样就实现了只能浏览自己的文件,同时在自己的目录下上传文件喽。

 在配置的时候关闭了文件浏览,只提供文件快速上传 但是在使用的时候如果“"/townfile/55/”中的”55“路径没创建,上传中FCKeditor它不会创建,也导致了文件无法上传成功,那就需要再修改FCKeditor.net项目中的Uploader.cs文件,添加一段文件夹存在的检测代码,如果不存在用户指定的文件夹侧创建一个。。。这个操作已经几乎不是问题了
}
}

  回复  引用    

补充下,上面那个是实现图片的分用户系统上传控制,
但是在此设置方法 通用于Image,Flash和Link类的浏览目录怎么办呢?
我网上查了下Fckeditor属性中有:
FCKeditor1.ImageBrowserURL = sImageBrowserURL;
FCKeditor1.LinkBrowserURL = sLinkBrowserURL;
FCKeditor1.FlashBrowserURL = sFlashBrowserURL;
但是”FlashBrowserURL“这个属性是不存在的,要是这个功能解决,我们就可以把Fckedtior 在多用户系统下的功能全部集中在一起,让更多的人少走弯路。剩下的就是Fckeditor的文件管理喽。。。这个问题等我们把上面的问题搞定了再一起总结下

  回复  引用    

#29楼[楼主] 2008-11-08 11:55 朱博      
@ZHAOYN
你的校验代码应该没错,问题是当图片稍微大点的时候,当它还未加载完毕你就去获取它的fileSize属性,值就是-1了。你得增加图片加载是否完成的判断。

  回复  引用  查看    

#30楼[楼主] 2008-11-08 12:10 朱博      
@hupeichuan
兄弟你好勤奋:)

通过设置Session["FCKeditor:UserFilesPath"]的确可以达到你要得效果,但这同时也破坏了原有程序要生成基于日期或者Guid生成子目录的功能。

比较好的办法还是要改造一下FCKeditor.Net,比如给FredCK.FCKeditorV2.FileBrowser.StoreScheme加入一个参数,%userid,来标识使用用户ID作为子目录。

这样就不会遇到目录未创建的情况,因为我原来的逻辑已经实现了目录自动创建的逻辑:
FredCK.FCKeditorV2.FileBrowser.FileWorkerBase.FileFolderOnTheBasisOfPattern

对于Flash和Link我没有过多考虑,我改造的FCKeditor.Net_2.6.3也仅仅针对Image测试通过。

  回复  引用  查看    

@朱博
呵呵,哥们,我也是基于兴趣呵呵,我对程序比较敏感,会冲动。哈哈

  回复  引用    

朱博兄弟,能否把FCKeditor再改进下,可以分用户上传浏览文件,就像你在web.config配置下就很方便了,使用起来很简单。谢谢
  回复  引用    

#33楼[楼主] 2008-11-09 19:02 朱博      
@hupeichuan
好的,我最近抽时间做一下给各位分享。

  回复  引用  查看    

@朱博
哥们,你太棒了,太期待了,我最近开发的项目就需要这样的功能噢

  回复  引用    

朱博 ,我也来支持,FCKeditor 这个控件要是分用户能浏览上传的话多好噢在网上查了很久都没找到

  回复  引用    

#36楼[楼主] 2008-11-11 11:42 朱博      
@hupeichuan
@向左向右

已经可以通过配置Web.config根据当前登录用户的标识来使用不同的图片上传目录了。

但仅仅针对图片上传。其他类型文件上传、浏览均未实现,有兴趣的朋友可以完善一下。

  回复  引用  查看    

@朱博
迫不及待,看看先

  回复  引用    

@朱博
哥们,请问你一下,如果要做个多用户新闻发布系统的话,可以动态创建栏目,栏目下有文章,要是想实现删除栏目,把文章的数据也删除的话这个不是问题,如果用到Fckeditor在线编辑器的话,删除栏目同时把栏目下的文章删除并删除文章的附件比如“FLASH,图片”等等。这样怎么实现呢?

  回复  引用    

@朱博
我是这样实现的。因为是多用户管理系统的附件控制比较严格,各自发布的信息隔离的比较好。比如用户标识55,创建了栏目10,同时在栏目下发表了图文混排文章,那么就会在发表有附带图片的文章的时候创建了55/10/yy/mm/dd/文件名。因此在删除栏目的时候删除数据库数据并且利用IO操作来删除10文件夹下的所有的目录和文件。
LoginedUserIdentifier = "44"; 这边能否以编程的形式来赋值,比如44/10
“44”是用户标识,”10“是栏目文件夹的名称

  回复  引用    

#40楼[楼主] 2008-11-11 12:47 朱博      
@hupeichuan
你的办法挺好的。

还有一种办法,文章中包含的媒体文件(图片、视频、其他文件……)记录在一个表里面,当删除文章时,媒体文件一并删除即可。

这需要在上传媒体文件时就增加相应的逻辑去记录,通过修改FCKeditor是可以做到的。

  回复  引用  查看    

@朱博
“还有一种办法,文章中包含的媒体文件(图片、视频、其他文件……)记录在一个表里面,当删除文章时,媒体文件一并删除即可。
这需要在上传媒体文件时就增加相应的逻辑去记录,通过修改FCKeditor是可以做到的。

我以前想过这样的方式实现看下是不是很你一样的?
比如
新闻表news(id,message,....)
建立一张数据库表如attachment(id,newid,path)
这两张表建立外键约束,message是新闻内容,可以是图文混排的。message
字段的数据比如是:XXX[img]3[/img]YYY[img]4[/img] 这里的3和4是对应的attachment表里面的主键id,因此在读取新闻的时候利用正则表达式提取所有[img][/img]的内容,即可得到该文章包含的所以附件ID---》再选择出附件的URL,很容易得到图文混排。不过对文章删除的时候因为建立了外键约束只能把附件表attachment里面相关的数据给删除,并没有删除磁盘里面的文件。会造成垃圾文件

  回复  引用    

补充下:

删除文章的时候首先找出attachment表里面的相关附件的URL,删除文件--------->删除附件表的数据----->最后删除文章
只是是这样的执行顺利。要是先删除新闻表或是附件表数据的话会导致找不到附件的路径。。。
这样是个办法,不过存在个问题附件删除的期间出现了异常有可能会造成附件删除了但是接下来执行的删除数据库附件表数据和新闻表数据还存在。导致文章存在附件却没有喽。。。
呵呵
朋友,你有什么高招?

  回复  引用    

#43楼[楼主] 2008-11-13 09:49 朱博      
@hupeichuan
我的方法和你的方法是一样的,就是先根据attachment表中记录的附件路径将其删除后再删除附件表数据、新闻表数据。

你可以在可能出问题的地方try catch一下,保证其出错也不会影响后面的代码执行。

不过这个方法也有不足,如果用户修改文章时删除了某些图片,是不能同时把删除的图片删除掉的。

  回复  引用  查看    

@朱博
不过这个方法也有不足,如果用户修改文章时删除了某些图片,是不能同时把删除的图片删除掉的。

恩, 认可,我也是遇到这样的问题

  回复  引用    

#45楼 2008-12-05 15:16 Theo      
我按照你博客里的配置了config文件,就是加 <add key="FCKeditor:FolderPattern" value="%y/%m/%d/"/><add key="FCKeditor:UploadedFilesDomain" value="http://www.aa.com/"/>" target="_new">http://www.aa.com/"/>
但是为什么上传的图片还是显示的相对路径,也没有按日期分文件夹呢,而且上传后显示的相对路径是加了我的项目名称的(我是本地测试),比如我是http://localhost/Solution1/aa.aspx,上传后的图片路径是/Solution1/fckimg/1.jpg了,望帮忙一下,很急,先谢谢了" target="_new">http://localhost/Solution1/aa.aspx,上传后的图片路径是/Solution1/fckimg/1.jpg了,望帮忙一下,很急,先谢谢了

  回复  引用  查看    

#46楼 2008-12-06 10:08 theomi[未注册用户]
楼主,很急啊,这个问题怎么解决啊,恳请看到后帮帮忙
  回复  引用    

#47楼[楼主] 2008-12-06 18:10 朱博      
@Theo
请先确认一下你网站Bin目录下面的FredCK.FCKeditorV2.dll是使用的http://files.cnblogs.com/zhubo/FredCK.FCKeditorV2_20081111.rar么" target="_new">http://files.cnblogs.com/zhubo/FredCK.FCKeditorV2_20081111.rar么

还有你的FCKeditor版本是否2.6.3?

  回复  引用  查看    

#48楼 2008-12-08 09:04 theomi[未注册用户]
我是在官网下载的,2.63的,源码是.net的``

  回复  引用    

#49楼 2008-12-08 09:22 theomi[未注册用户]
哦,真谢谢,用你给的地址里的DLL可以了,非常感谢
不过我有一点不明白, 怎么我到官方下的最新版的不行呢,DLL是.net源码版里的

  回复  引用    

#50楼[楼主] 2008-12-08 09:33 朱博      
@theomi
因为这些功能不是 FCKeditor.NET 2.6.3 本来具有的功能,是我后来扩展的。

  回复  引用  查看    

首先谢谢楼主,我使用了你的控件。
现在我遇到的问题是,我要自定义上传后图片URL中的域名。按你所指导的做了,可还是显示不出图片。图片会变成叉号。找不到。请问是什么缘故。

  回复  引用    

#52楼[楼主] 2009-05-21 10:13 朱博      
@huaxiaoyao
不用客气,分享是一种乐趣。

问题1:你设定的域名是什么?
问题2:请在叉号上点击右键 > 属性,看到的URL是什么?

请回答一下上面2个问题,我看是什么原因。

  回复  引用  查看    

改造的不错,就是上传的时候,选择的文件上传之后如果选择的是生成的文件夹(即在生成的文件夹中选择了上传,那么又再次生成文件夹),如果这个问题能解决就更完美了
  回复  引用    

楼主提供的DLL,当设置FCKeditor:MaxWidthOfUploadedImg时有个问题,GIF图片背景色出问题。
  回复  引用    

#55楼[楼主] 2009-06-05 17:12 朱博      
@股票兔
谢谢提醒。

设置FCKeditor:MaxWidthOfUploadedImg,实质上是将图片采用JPEG的方式压缩了,所以就导致GIF图片的透明背景色出现了问题。我试试看有没有更好的方法,如果有,会及时更新。

  回复  引用  查看    

#56楼[楼主] 2009-06-08 18:22 朱博      
@egghead008
不好意思,我没有看明白您的意思。您是说如果从文件上传目的文件夹中选择,又要再次生成该文件夹?您是在WebServer上做的实验对么?

  回复  引用  查看    

--引用--------------------------------------------------
朱博: @股票兔
谢谢提醒。

设置FCKeditor:MaxWidthOfUploadedImg,实质上是将图片采用JPEG的方式压缩了,所以就导致GIF图片的透明背景色出现了问题。我试试看有没有更好的方法,如果有,会及时更新。
--------------------------------------------------------
期待。急用。请更新后尽快公告

  回复  引用    

#58楼 2009-07-03 18:08 新手中的新手
LZ的东西果然好,自己本来想直接改源码的,无奈今天下的源码都是解压缩的时候出错,不知道什么原因, 就用了LZ的DLL,出现了点问题,不知道LZ能否帮忙看下:
  回复  引用    

#59楼[楼主] 2009-07-03 18:13 朱博      
@新手中的新手
没问题,请把问题的现象描述一下。

  回复  引用  查看    

#60楼 2009-07-03 18:13 新手中的新手
不小心发掉了,不好意思。。嘿嘿。
web.config文件里面如下设置:<add key="FCKeditor:UserFilesPath" value="~/upload/image/"/>
然后再上传图片的时候路径就变成这样:/AllAspNet/upload/image//6044404c-38cc-4c4b-9455-a941a00b8732.bmp
就是在文件名前面多了个“/” 很奇怪。。。配置文件里面上传路径尾部改的少了一个“/”测试仍然是这样。。不知道什么地方出了问题,望LZ能帮助我解决下。万分感激了!

  回复  引用    

#61楼[楼主] 2009-07-03 18:22 朱博      
将配置:<add key="FCKeditor:UserFilesPath" value="~/upload/image/"/>改为:
<add key="FCKeditor:UserFilesPath" value="/AllAspNet/upload/image/"/>即可

  回复  引用  查看    

#62楼 2009-07-03 18:24 新手中的新手
T_T 问题依然, 是不是我的DLL和fckeditor文件夹里面的不匹配的原因啊?
  回复  引用    

#63楼 2009-07-03 23:32 新手中的新手
好了,问题解决了。。。。
因为上传路径总会由FileFolderOnTheBasisOfPattern(String sServerDir)方法来构造,这里面有个字段String path 读取的是Config.FolderPattern 属性,在Config类里面关于FolderPattern属性是根据一系列的方法来构建的,最后一个重要的地方就是:
if (!folderPattern.EndsWith("/"))
folderPattern += "/";
这里面folderPattern其实就是获取自定义路径。但是我并不想要自定义一个路径,所以这里取到的folderPattern="" ,所以这句就执行了,那么自定义路径就变成了“/”,本来我没有自定义路径,这个folderPattern应该为空或者"" ,然后这个folderPattern又和后面的文件名拼接,组成新的路径,加上前面获取了真实的物理路径,就变成了:
/AllAspNet/upload/image//6044404c-38cc-4c4b-9455-a941a00b8732.bmp
这种情况。。。。这个....image//6044404c....中间多出来的“/”就是前面的原因造成的,也就是因为我没自定义一个路径造成的,所以我把LZ的东西稍微改了下,把
if (!folderPattern.EndsWith("/"))
folderPattern += "/";
加了个判断,改成:
if (!folderPattern.EndsWith("/") && folderPattern!="")
folderPattern += "/";
判断是否我给出了一个自定义路径,当然这是根据我自己的需求来改的。。
经测试是可行的。。。问题都解决了。
感谢LZ分享的修改版本,省去了我很多时间,有很多东西我自己也不会,顺便也从LZ这里学了不少东西!

  回复  引用    

#64楼[楼主] 2009-07-06 09:40 朱博      
@新手中的新手
非常感谢。这个Bug我已修正,并更新了源码。

  回复  引用  查看    

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1315987




相关文章:

相关链接: