如何在 FCKeditor 中*动态*更改图像上传路径

Posted

技术标签:

【中文标题】如何在 FCKeditor 中*动态*更改图像上传路径【英文标题】:How do I change image upload path *dynamically* in FCKeditor 【发布时间】:2010-11-19 14:29:40 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

天哪,经过一番挣扎,我唯一能得到的是:

fckEditor1.Config

属性。尝试为您要配置的编辑器设置它:

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

【讨论】:

感谢您尝试帮助我,但这不起作用。 config-property 仅适用于实际编辑器,不适用于编辑器文件浏览器。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

完整主题: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");

N.B.:这里,$_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");

请阅读 N.B.在上一点的末尾,即点 (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");

请阅读 N.B.在第 (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 文件夹和 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())

你就完成了。

【讨论】:

以上是关于如何在 FCKeditor 中*动态*更改图像上传路径的主要内容,如果未能解决你的问题,请参考以下文章

PHP Fckeditor 上传图片的问题

asp中如何使用fckeditor插入视频文件!

在jsp和asp中怎么用FCkeditor上传图片和flash等到服务器啊?

FCKEditor实现WORD粘贴公式自动上传

Fckeditor实现WORD粘贴图片自动上传

Ecshop将内置的 FCkeditor 更换为 UEditor