如何在 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 += '¶m_project_to_fck=' + param_project_to_fck ;
(b) 现在,打开 ckeditor\editor\filemanager\browser\default\frmupload.html 文件。
搜索这一行(应该在 SetCurrentFolder() 函数中):
sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
将该命令放在该行之后:
sUrl += '¶m_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¶m_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¶m_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¶m_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
b) 如果您选择 1) (a) (ii) 方法,那么在上面的代码代码段中,只需将所有文本:base64_encode($SERVER_RELATIVEPATH) 替换为:base64_encode(session_name())
你就完成了。
【讨论】:
以上是关于如何在 FCKeditor 中*动态*更改图像上传路径的主要内容,如果未能解决你的问题,请参考以下文章