通过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判断当前用户是否有上传权限。这部分逻辑需要单独实现,后面再补上。
最终效果是:在后台编辑器中上传图片,图片会直接存到指定的图片服务器上,返回的地址是相对路径。我们可以通过记录当前模块对应的图片服务器组来区分存储位置。比如“新闻发布”模块用一组服务器,“图片展示”模块用另一组。
但必须承认,这种方案对“一个标题对应多个媒体文件”的场景(比如相册、音乐专辑)并不友好——每个文件都需要独立处理上传和关联,这时候还是得写专门的上传程序。至于怎么实现,那就是另一个话题了。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













