簡體   English   中英

如何在FCKeditor中動態更改圖像上載路徑*

[英]How do I change image upload path *dynamically* in FCKeditor

我正在為我的FCKeditor使用ASP.NET二進制文件,並且需要在同一頁面上插入兩個編輯器。 上傳的圖像/瀏覽需要轉到兩個不同的目錄,如何從代碼隱藏中執行此操作?

我知道路徑上傳的文件是在設置config.ascx與-file UserFilesPath設置,但我不能找到一種方法來覆蓋從我的這個值aspx.cs文件。

此外,我發現(沖突的)文檔說明可以設置Session["FCKeditor:UserFilesPath"] ,但我不喜歡將usercontrol特定信息放在全局會話變量中。

首先,您需要將用戶身份信息分配到會話[“UserInfo”]

然后轉到[fckeditor root folder] /filemanager/connector/aspx/config.ascx

string Userfolder = Session["UserInfo"].ToString(); // URL path to user files. UserFilesPath = "~/Upload/" + Userfolder;

哦,親愛的,經過多次努力,我能得到的是:

fckEditor1.Config

屬性。 嘗試為要配置的編輯器設置它:

fckEditor1.Config [“UserFilesPath”] =“你的路徑”

這可能會奏效。 至少它對我有用。

Session["FCKeditor:UserFilesPath"] = "~/images/";

對不起,我認為你最好的辦法是停止使用控件,而是使用javascript api。

完整主題:FCK編輯器2.x:使用單個FCKeditor在不同文件夾中為不同的應用程序上傳文件/圖像/視頻,使$ Config ['UserFilesPath']以安全的方式完全動態

它可以通過多種方式完成。 我正在解釋一個過程,我根據我的php應用程序的代碼結構應用了它。 我為不同的應用程序遵循相同的代碼結構/框架,每個應用程序作為我的服務器中的子文件夾。 因此,邏輯上需要使用一個FCKeditor並以某種方式對其進行配置,以便它適用於所有應用程序。 FCKeditor的內容部分沒問題。 它可以通過單個FCKeditor組件輕松地由不同的應用程序或項目重用。 但問題出現在文件上傳上,如圖像,視頻或任何其他文檔。 為了使其適用於不同的項目,必須將文件上載到不同項目的separe文件夾中。 為此,$ Config ['UserFilesPath']必須配置動態文件夾路徑,表示每個項目的不同文件夾路徑,但在同一位置調用相同的FCKeditor組件。 我一步一步地解釋了一些不同的過程。 FCKeditor版本2.5.1和VersionBuild 17566對我很有用,我希望它們也可以為其他人工作。 如果它不適用於其他開發人員,那么他們可能需要根據他們的項目代碼結構和文件夾寫入權限以及FCKeditor版本在這些過程中進行一些調整。

1)在fckeditor \\ editor \\ filemanager \\ connectors \\ phpconfig.php文件中

a)追求全球$ Config; 和$ Config ['Enabled'] = false; i)在那里,如果想要一個會話相關的安全方法:僅用於單個站點設置:即每個項目域或子域一個FCKeditor,而不是一個FCKeditor用於多個項目,然后放置此代碼:

if(!isset($_SESSION)){
session_start(); 
}

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

注意:這里,$ _SESSION ['SESSION_SERVER_RELATIVEPATH']:與webroot對應的項目的相對文件夾路徑; 應該像“/ project / folder / path /”並將此會話變量設置在會話開始的項目中的公共文件中。 並且應該有一個配置/ configuration.php作為項目中的配置文件。 如果它的名稱或路徑不同,則必須在此處放置相應的路徑而不是配置/ configuration.php

ii)如果希望將單個FCKeditor組件用於表示為不同子文件夾的不同項目,並使用會話相關的安全方式(假設不同項目的session_name不同,則在單個服務器中區分它們的會話)。 但是如果項目表示為子域或不同的域,那么它將不起作用,然后必須使用會話獨立的方式(iii)提供(雖然它是不安全的)。 放置此代碼:

if(!isset($_SESSION)){
session_name($_REQUEST['param_project_to_fck']); 
session_start(); 
}

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

請在上一點結束時閱讀NB,即點(i)

iii)如果想要為不同的項目使用單個FCKeditor組件,則表示不同的子文件夾以及子域或域(盡管它不是完全安全的)。 放置此代碼:

if(isset($_REQUEST['param_project_to_fck']) && $_REQUEST['param_project_to_fck']!=""){ //base64 encoded relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" before encoding 
$relative_path=base64_decode($_REQUEST['param_project_to_fck']);
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

請在結束時閱讀NB(i)

b)現在,對於您選擇的任何案例,請找到此代碼:

// Path to user files relative to the document root.
$Config['UserFilesPath'] = '/userfiles/' ;

並替換以下代碼:

if(isset($SERVER_RELATIVEPATH) &&  $SERVER_RELATIVEPATH==$relative_path) { //to make it relatively secure so that hackers can not create any upload folder automatcally in the server, using a direct link and can not upload files there 
$Config['Enabled'] = true ;
$file_upload_relative_path=$SERVER_RELATIVEPATH;
}else{
$Config['Enabled'] = false ;
exit();
}
// Path to user files relative to the document root.
//$Config['UserFilesPath'] = '/userfiles/' ;
//$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path;

這里$ SERVER_RELATIVEPATH是相對路徑,必須在之前包含的項目配置文件中設置。

在這里你可以使用$ file_upload_relative_path變量在任何其他動態文件夾路徑中設置$ Config ['UserFilesPath']。在我的bluehost linux服務器中,因為它們是項目根文件夾(0755權限)和userfiles文件夾之間的文件夾用戶權限沖突在它下面和用戶文件下的子文件夾(根據FCKeditor編碼應該是0777),所以它不允許在這些文件夾中上傳文件。 因此,我在服務器webroot(項目根文件夾之外)創建了一個文件夾userfiles,並將權限設置為0777,使用$ config設置的代碼:

$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path; 

但是,如果在您的案例中項目的子文件夾中的寫權限沒有問題,那么您可以使用上一行(在前面的代碼段中注釋掉):

$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;

記住它,你譴責現有的$ Config ['UserFilesPath'] ='/ userfiles /'; 在此文件中,通過替換或簡單注釋掉它是否存在於文件的其他位置。

2)如果您選擇1)(a)(ii)或(iii)方法,則打開
(a)fckeditor \\ editor \\ filemanager \\ browser \\ default \\ browser.html文件。

搜索這一行:var sConnUrl = GetUrlParam('Connector');

將這些命令放在該行之后:

var param_project_to_fck = GetUrlParam( 'param_project_to_fck' ) ; 

現在,搜索這一行:sUrl + ='&CurrentFolder ='+ encodeURIComponent(this.CurrentFolder);

在該行之后放置此命令:

sUrl += '&param_project_to_fck=' + param_project_to_fck ; 

(b)現在,打開ckeditor \\ editor \\ filemanager \\ browser \\ default \\ frmupload.html文件。

搜索這一行(它應該在SetCurrentFolder()函數中):

sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;

在該行之后放置此命令:

sUrl += '&param_project_to_fck='+window.parent.param_project_to_fck;

3)現在你要在項目中顯示FCKeditor,你必須先將這些行放在相應的php文件/頁面中:

include_once(Absolute/Folder/path/for/FCKeditor/."fckeditor/fckeditor.php") ; 
$oFCKeditor = new FCKeditor(Field_name_for_editor_content_area) ;
$oFCKeditor->BasePath = http_full_path_for_FCKeditor_location.'fckeditor/' ;
$oFCKeditor->Height = 400;
$oFCKeditor->Width = 600;
$oFCKeditor->Value =Your_desired_content_to_show_in_editor;
$oFCKeditor->Create() ; 

a)現在,如果您選擇1)(a)(ii)或(iii)方法,則在該行之前放置以下代碼段:$ oFCKeditor-> Create();

$oFCKeditor->Config["LinkBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["ImageBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["FlashBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Flash&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);

b)如果你選擇1)(a)(ii)方法,那么在上面的代碼段中,只需用以下代碼替換所有文本:base64_encode($ SERVER_RELATIVEPATH):base64_encode(session_name())

你完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM