网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 手机学院 | 邮件系统 | 网络安全 | 认证考试
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.在Asp.net中为图像加入版权信息.
.如何实现无刷新的DropdownList联.
.ASP.NET性能最佳实践 .
.ASP.NET图象处理详解(2).
.灵活正确的实现.NET插件机制.
.在asp.net 页面中加入skype功能.
.ASP.NET 2.0 中 Web 事件.
.如何在GridView中一次性批量更新.
.轻松加密ASP.NET 2.0 Web程序配置.
.ASP.NET Forums与现有系统整合方.
.部署ASP.NET(包含.net framework.
.在DataGrid里面根据日期的不同显.
.ASP.NET上传图片时,产生预览.
.Asp.Net 使用 GDI+ 绘制3D饼图入.
.在ASP.NET Atlas中调用Web Servi.
.为XPath自定义函数(因为XPath1..
.asp.net ajax 使用updatepanel进.
.ASP.NET 2.0–善用DataSourceMod.
.ASP.NET2.0的控件状态和视图状态.
.ASP.NET 2.0 中配合 Master Page.

实现FCKeditor 多用户分文件夹上传图片等附件

发表日期:2008-12-12

  FCKeditor在web.config中有多项设置:view plaincopy to clipboardprint?
<appSettings> 
<!--FCKeditor设置(主要是以下两项)--> 
<!--FCKeditor编辑器路径--> 
<add key="FCKeditor:BasePath" value="/FCKeditor/"/> 
<!--FCKeditor用户附件上传路径--> 
<add key="FCKeditor:UserFilesPath" value="/Resources/TempUpload/"/> 
</appSettings> 

 <appSettings>
 <!--FCKeditor设置(主要是以下两项)-->
 <!--FCKeditor编辑器路径-->
 <add key="FCKeditor:BasePath" value="/FCKeditor/"/>
 <!--FCKeditor用户附件上传路径-->
 <add key="FCKeditor:UserFilesPath" value="/Resources/TempUpload/"/>
 </appSettings>  用户登录后通过FCKeditor上传文件则要放置在用户共用上传路径“/Resources/UserUpload/”+“用户邮箱地址”,如“/Resources/UserUpload/user@gmail.com”。FCKeditor.net获取上传路径文件是:FileWorkerBase.cs,打开找到以下部分view plaincopy to clipboardprint?
 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 ;  
      }  
    } 

 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上用户上传路径了view plaincopy to clipboardprint?
protected void Page_Load(object sender, EventArgs e)  
{  
 if (!Page.IsPostBack)  
 Session["FCKeditor:UserFilesPath"] = "用户上传路径";  

protected void Page_Load(object sender, EventArgs e)
{
 if (!Page.IsPostBack)
 Session["FCKeditor:UserFilesPath"] = "用户上传路径";
}  (我在配置的时候关闭了文件浏览,只提供文件快速上传)但是在使用的时候如果“Resources/UserUpload/user@gmail.com”中的user@gmail.com路径没创建,上传中FCKeditor它不会创建,也导致了文件无法上传成功,那就需要再修改FCKeditor.net项目中的Uploader.cs文件,添加一段文件夹存在的检测代码,如果不存在用户指定的文件夹侧创建一个view plaincopy to clipboardprint?
// Get the uploaded file name.  
string sFileName = System.IO.Path.GetFileName( oFile.FileName ) ;  
 
int iCounter = 0 ;  
 
//景裔添加  
//检查上传目录是否已经被创建  
//开始==========================================  
//检查当前完整路径是否存在,不存在则开始逐级轮询检查,不存则就创建  
if (!System.IO.Directory.Exists(UserFilesDirectory))  
{  
string[] tempDirectorys = UserFilesDirectory.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries); 
string tempDirectory = string.Empty; 
for (int i = 0; i < tempDirectorys.Length; i++) 

tempDirectory += tempDirectorys[i] + "\\"; 
if (!System.IO.Directory.Exists(tempDirectory)) 
System.IO.Directory.CreateDirectory(tempDirectory); 


//结束========================================== 
 
while ( true ) 

string sFilePath = System.IO.Path.Combine( this.UserFilesDirectory, sFileName ) ; 
 
if ( System.IO.File.Exists( sFilePath ) ) 

iCounter++ ; 
sFileName =  
System.IO.Path.GetFileNameWithoutExtension( oFile.FileName ) + 
"(" + iCounter + ")" +  
System.IO.Path.GetExtension( oFile.FileName ) ;  
 
iErrorNumber = 201 ;  
}  
else 
{  
oFile.SaveAs( sFilePath ) ;  
 
sFileUrl = this.UserFilesPath + sFileName ;  
break ;  
}  

 // Get the uploaded file name.
 string sFileName = System.IO.Path.GetFileName( oFile.FileName ) ;

 int iCounter = 0 ;

 //景裔添加
 //检查上传目录是否已经被创建
 //开始==========================================
 //检查当前完整路径是否存在,不存在则开始逐级轮询检查,不存则就创建
 if (!System.IO.Directory.Exists(UserFilesDirectory))
 {
 string[] tempDirectorys = UserFilesDirectory.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
 string tempDirectory = string.Empty;
 for (int i = 0; i < tempDirectorys.Length; i++)
 {
 tempDirectory += tempDirectorys[i] + "\\";
 if (!System.IO.Directory.Exists(tempDirectory))
 System.IO.Directory.CreateDirectory(tempDirectory);
 }
 }
 //结束==========================================

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

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

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

 sFileUrl = this.UserFilesPath + sFileName ;
 break ;
 }
 }  这样就基本解决了多用户分文件夹上传图片的问题,不过也有缺陷的地方,就是当用户Session超时的时候,用户再使用浏览器上传文件就不会按照指定用户文件夹上传来了,分析这个情况可以得出:这个时候用户通过编辑器上传的文件也就是对编辑器内容作出了修改,但是因为Session超时了,所以可以把做出的修改视作无效,既然修改无效,那用户上传的文件也是没用的,所在我在web.config中又设置了个默认文件上传位置,所有无效文件都会上传到这里,那个回清理的时候也方便多了  不知道哪位大虾还有更好的办法。
出处:http://blog.breakn.net/article.asp?id=388

上一篇:asp.net AJAX中的CascadingDropDown控件使用心得 人气:173
下一篇:解决网址参数获取乱码问题 人气:222
浏览全部FCKeditor的内容 Dreamweaver插件下载 网页广告代码 2009年新年快乐