当前位置:

首页 > 编程开发 > 通过Fckeditor把图片上传到独立图片服务器的方法

通过Fckeditor把图片上传到独立图片服务器的方法

在图片服务器和后台服务器分别部署Fckeditor,通过修改BasePath指向远程资源、开启上传功能并利用子域跨域方案,实现将图片直接上传至独立图片服务器,返回相对路径,支持按模块区分存储位置。

其实,要解决跨服务器图片上传的问题,思路无非那么几条,咱们挨个捋一捋。

第一种,直接在图片服务器上开FTP,人为手动添加图片地址。这办法简单粗暴,但体验极差——尤其在可视化编辑器里看图,还得另开窗口操作,流程割裂,基本不可取。

第二种,同样在图片服务器上开FTP,但让IIS执行DOS Shell去访问FTP。这招技术上可行,但安全风险太高,等于把服务器大门敞开了一条缝,生产环境里谁敢这么干?

第三种,在图片服务器上直接部署IIS,让后台Web程序通过跨域请求访问。这么做虽然解决了查看问题,但编辑器里依然不方便预览,得靠JS在上传后自动把图片地址追加到编辑窗口,而且需要单独写一套上传程序,改动量不小。

第四种,直接利用现有在线编辑器自带的文件上传功能。这是最理想的方向——成熟、稳定、无需重复造轮子。

第三、四种方案靠谱,但都绕不开跨域问题。第三种还得单独写程序,改动太大,所以第四种就成了最优解。

那么,具体该怎么落地?之前用的后台编辑器是dvbbs自带的,这次决定换成FCKeditor。虽然对FCKeditor不算特别熟,但折腾了一天,总算跑通了。下面把关键步骤拆开来说。

第一步:双端部署

在图片服务器(img.jb51.net)和后台服务器(gl.cdbs.com.cn)上都装上FCKeditor。注意,后台服务器其实只需要一个fckeditor.asp文件,因为ASP不能直接include外网文件,所以后台只做入口,真正的编辑器资源从图片服务器加载。

第二步:设置BasePath

在后台程序中,把sBasePath指向图片服务器上的FCKeditor目录:

<%
Dim sBasePath
sBasePath="http://img.jb51.net/fckeditor/"
Dim oFCKeditor
Set oFCKeditor = New FCKeditor
oFCKeditor.BasePath = sBasePath
oFCKeditor.Config("SkinPath") = sBasePath + "editor/skins/silver/" '设置皮肤
'oFCKeditor.Width="80%"
oFCKeditor.Height="400px"
oFCKeditor.Value = ""
oFCKeditor.Create "FCKeditor1"
%>

这样一来,编辑器本身就不需要本地部署了,直接调用远程服务器的资源。

第三步:修改fckconfig.js

在图片服务器上编辑FCKeditor根目录下的fckconfig.js,把文件上传的语言改成ASP:

var _FileBrowserLanguage = 'asp' ; // asp | aspx | cfm | lasso | perl | php | py
var _QuickUploadLanguage = 'asp' ; // asp | aspx | cfm | lasso | perl | php | py

这一步决定了上传功能调用的后端脚本类型。

第四步:配置connector

打开图片服务器上的 fckeditor/editor/filemanager/connectors/asp/config.asp,把 ConfigIsEnabled 设为 true。这是开启上传功能的前提,很多人卡在这一步忘了改。

第五步:解决跨域

核心问题来了。后台和图片服务器域名不同,浏览器的同源策略会拦截操作。如果两个域名属于同一主域(比如都是cdbs.com.cn下的子域),可以用 document.domain='cdbs.com.cn' 搞定。如果域名完全不同,那就要上JSONP或CORS了,本文以子域方案为例。

第六步:安全加固(待完善)

目前跨域上传已经能跑通,但还缺一道安全防线——需要通过跨站Cookie判断当前用户是否有上传权限。这部分逻辑需要单独实现,后面再补上。

最终效果是:在后台编辑器中上传图片,图片会直接存到指定的图片服务器上,返回的地址是相对路径。我们可以通过记录当前模块对应的图片服务器组来区分存储位置。比如“新闻发布”模块用一组服务器,“图片展示”模块用另一组。

但必须承认,这种方案对“一个标题对应多个媒体文件”的场景(比如相册、音乐专辑)并不友好——每个文件都需要独立处理上传和关联,这时候还是得写专门的上传程序。至于怎么实现,那就是另一个话题了。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 FCKeditor
相关文章 更多
针对PHP环境下Fckeditor编辑器上传图片配置详细教程
针对PHP环境下Fckeditor编辑器上传图片配置详细教程

针对PHP环境下Fckeditor编辑器的图片上传配置,需修改config.php开启上传功能,配置上传路径,限制图片大小,解决文件名重名与中文乱码问题,并可通过添加水印保护版权。

FCKeditor编辑器添加图片上传功能及图片路径问题解决方法
FCKeditor编辑器添加图片上传功能及图片路径问题解决方法

开启FCKeditor图片上传需修改config.js文件中的相关配置、复制filemanager文件夹到服务器,设置config.asp上传路径为"/uploads/",修改io.asp消除双斜杠错误,添加commands.asp实现自动重命名。另通过正则表达式解决邮件中图片路径显示问题,分别提供ASP与.NET两种解法。

ie9后浏览器fckeditor无法上传图片、弹出浮层内容不显示的解决方法
ie9后浏览器fckeditor无法上传图片、弹出浮层内容不显示的解决方法

IE9浏览器升级后不再支持var$=document.getElementById这种简写赋值,导致FCKeditor富文本编辑器中的弹出浮层功能失效,用户无法正常使用。解决此问题有两种常用方法:一是通过添加meta标签强制IE9以IE8兼容模式渲染页面,操作简单但可能影响其他高级特性;二是修改FCKeditor的JavaScript源文件,将其中的FCKT

fckeditor 防止上传非法文件 增加登录判断
fckeditor 防止上传非法文件 增加登录判断

针对FCKeditorASP版本,需在connector.asp和upload.asp中增加登录验证,防止未授权用户直接上传非法文件(如木马、病毒、脚本)。同时强烈建议将默认fckeditor目录重命名为不易猜测的复杂字符串,以阻断扫描攻击。两者配合可有效提升系统安全性,防止常见攻击。

fckeditor在ie9中无法弹出对话框的解决方法(弹出层兼容问题)
fckeditor在ie9中无法弹出对话框的解决方法(弹出层兼容问题)

IE9下FCKeditor弹出对话框无响应,因不支持var$=document.getElementById简写。修改fckeditor/editor/js/fckeditorcode_ie.js第38行RegisterDollarFunction函数,将赋值改为匿名函数即可解决。

Fckeditor编辑器内容长度限制统计实现方法
Fckeditor编辑器内容长度限制统计实现方法

利用FCKeditorAPI获取编辑器内容并检测字符数,通过监听OnSelectionChange事件实时限制输入字数,超出上限时给出提示。代码覆盖基本调用、字数检测与长度限制,含初始化编辑器、绑定事件、计算字数、超限截断或警告步骤,防过多输入,用于严格控文本长度场景。

asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法
asp.net+FCKeditor上传图片显示叉叉图片无法显示的问题的解决方法

FCK编辑器上传图片显示叉叉,原因是配置文件中上传路径写错。部署到服务器需正确配置项目根目录下UserFiles文件夹路径;本地测试则需相应调整。确保路径一致并检查文件夹权限,图片才能正常显示。若仍不行,需检查服务器配置。

autogrow 让FCKeditor高度随内容增加的插件
autogrow 让FCKeditor高度随内容增加的插件

通过修改插件文件中的代码,将直接赋值改用样式高度属性,同时启用插件并设置最大高度限制,即可实现FCKeditor编辑器高度随内容自动增长,并兼容IE和火狐浏览器。此方法简单易行,无需额外插件,有效提升编辑体验。

浏览器执行history.go(-1) FCKeditor编辑框内显示html源代码的解决方法
浏览器执行history.go(-1) FCKeditor编辑框内显示html源代码的解决方法

遇到FCKEditor里字段值显示异常的问题?先别急着翻文档,分享一个常见的坑——很多情况下,代码里可能误用了FCKTools.HTMLEncode,把原本需要原样输出的内容又编码了一遍。解决方案很简单:把FCK.LinkedField.value = FCKTools.HTMLEncode(FCK

FCKeditor添加自定义按钮的方法
FCKeditor添加自定义按钮的方法

在FCKeditor中添加自定义按钮需三步:在皮肤目录的图片文件底部添加16×16像素图标;修改两个核心JS文件,参考Newpage按钮添加功能代码,包括原型、实例化和显示;在语言包中添加对应名称属性。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,