6

我正在为我的 FCKeditor 使用 ASP.NET 二进制文件,并且需要在同一页面上插入两个编辑器。上传的图像/浏览需要转到两个不同的目录,我该如何从代码隐藏中执行此操作?

我知道上传文件的路径是在config.ascx-file 中UserFilesPath设置的,但我找不到从我的aspx.cs文件中覆盖这个值的方法。

另外,我发现(冲突的)文档说明Session["FCKeditor:UserFilesPath"]可以设置,但我不喜欢将特定于用户控件的信息放在全局会话变量中。

4

5 回答 5

1

首先您需要将用户身份信息分配给 Session["UserInfo"]

然后转到 [fckeditor 根文件夹]/filemanager/connector/aspx/config.ascx

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

于 2009-10-30T04:50:35.447 回答
0

哦,亲爱的,经过一番挣扎,我唯一能得到的是:

fckEditor1.Config

财产。尝试为您要配置的编辑器设置它:

fckEditor1.Config["UserFilesPath"]="你的路径"

于 2009-08-14T12:42:36.763 回答
0

这可能会奏效。至少它对我有用。

Session["FCKeditor:UserFilesPath"] = "~/images/";
于 2009-10-08T19:34:36.700 回答
0

抱歉,我认为您最好的选择是停止使用控件,而改用 javascript api。

于 2009-10-24T18:14:47.677 回答
0

完整主题:FCK 编辑器 2.x:使用单个 FCKeditor 为不同的应用程序在不同的文件夹中上传文件/图像/视频,以安全的方式使 $Config['UserFilesPath'] 完全动态

它可以通过多种方式完成。我正在解释一个过程,我根据我的 php 应用程序的代码结构应用了该过程。我为不同的应用程序遵循相同的代码结构/框架,每个应用程序都作为我服务器中的一个子文件夹。因此,逻辑上需要使用一个单一的 FCKeditor 并以某种方式对其进行配置,以使其适用于所有应用程序。FCKeditor 的内容部分还可以。它可以很容易地被来自单个 FCKeditor 组件的不同应用程序或项目重用。但是文件上传会出现问题,例如图像、视频或任何其他文档。为了使其适用于不同的项目,文件必须上传到不同项目的单独文件夹中。而对于 $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/”并将此会话变量设置在会话开始的项目中的一个公共文件中。并且应该有一个configurations/configuration.php作为你的项目中的配置文件。如果它的名称或路径不同,您必须在此处放置相应的路径而不是configurations/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");
}

请阅读第 (i) 点末尾的 NB

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 文件夹之间的文件夹用户权限冲突在它和 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())

你完成了。

于 2013-09-28T22:24:59.253 回答