實現FCKeditor 多用戶分文件夾上傳圖片等附件

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

用JAVA實現ORACLE的文件上傳,下載
  文件上傳使用:http://www.Javazoom.net 的 UploadBeanJAVA包,他的文件上傳做的還不錯,可進行目錄或數據庫的文件上傳,默認使用的是Oracle 的LONGRAW子段類型,可使用BLOB類型,但需要使用擴展JAVA包,LONGRAW...查看完整版>>用JAVA實現ORACLE的文件上傳,下載
 
老話題,JavaBean實現多文件上傳
在網上看到許多上傳文件的例子,可是都是jsp程序,每碰到需要文件上傳的地方就要複制這段上傳代碼並做相應修改,維護起來極不方便。爲了增強代碼的可重用性,我將這段通用的上傳程序寫成了JavaBean,請大家多提意見。...查看完整版>>老話題,JavaBean實現多文件上傳
 
使用FileUpload組件實現文件上傳
文件上傳在web應用中非常普遍,要在servlet/jsp環境中實現文件上傳功能非常容易,因爲網上已經有許多用Java開發的組件用于文件上傳,本文以commons-fileupload組件爲例,爲servlet/jsp應用添加文件上傳功能。common-...查看完整版>>使用FileUpload組件實現文件上傳
 
jsp無刷新文件上傳的實現
本想利用AJAX實現無刷新文件上傳,後來發現不易實現,在網上找了很久,終于找到一個“僞AJAX”的實現方式,現在發出來我實際的代碼,一飨讀者。首先我們需要一個上傳的HTML或者JSP文件,如下:<FORM METHOD="POST...查看完整版>>jsp無刷新文件上傳的實現
 
用PHP實現文件上傳二法
     PHP(Hypertext Preprocessor)是一種 HTML 內嵌式的語言 (類似 IIS 上的ASP)。而 PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 式的新語法。它可以比 CGI 或者 Perl 更快速的執行動態網頁。除此之外,用 PH...查看完整版>>用PHP實現文件上傳二法
 
ASP中實現文件上傳方法的研究
     摘要:在基于浏覽器/服務器的應用環境中,在浏覽器中上傳各種類型的文件一直是困擾用戶文件管理應用的難題之一。在HTTP中上傳文件有三種機制:RFC1867,PUT和WebDAV。常用的實現方法是利用在RFC1867中引入的...查看完整版>>ASP中實現文件上傳方法的研究
 
用JAVA實現ORACLE的文件上傳,下載
  文件上傳使用:http://www.javazoom.net 的 UploadBeanJAVA包,他的文件上傳做的還不錯,可進行目錄或數據庫的文件上傳,默認使用的是ORACLE 的LONGRAW子段類型,可使用BLOB類型,但需要使用擴展JAVA包,LONGRAW...查看完整版>>用JAVA實現ORACLE的文件上傳,下載
 
用PERL實現多文件上傳
  一個真正支持二進制文件上傳,允許多文件上傳,可以對文件後綴進行限制,生成完整信息的小程序。。:)  原先的上傳由于沒有采用binmode方法,所以如果上傳圖片或二進制文件都會出錯,現在這個都已經解決了,而...查看完整版>>用PERL實現多文件上傳
 
真正實現用ASP無須第三方組件上傳任意類型的文件
一直以來,由于FileSystemObject的局限,所以ASP最大的難題就是文件上傳,大多解決法就是安裝第三方上傳組件。可第三方組件有很多問題,有的組件要注冊,有的組件要在表單中加上他的版權信息。還有的就是組件的兼容問題。...查看完整版>>真正實現用ASP無須第三方組件上傳任意類型的文件
 
 
回到王朝網路移動版首頁