发布于2026-07-22 阅读(0)
扫一扫,手机访问
其实,要解决跨服务器图片上传的问题,思路无非那么几条,咱们挨个捋一捋。
第一种,直接在图片服务器上开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判断当前用户是否有上传权限。这部分逻辑需要单独实现,后面再补上。
最终效果是:在后台编辑器中上传图片,图片会直接存到指定的图片服务器上,返回的地址是相对路径。我们可以通过记录当前模块对应的图片服务器组来区分存储位置。比如“新闻发布”模块用一组服务器,“图片展示”模块用另一组。
但必须承认,这种方案对“一个标题对应多个媒体文件”的场景(比如相册、音乐专辑)并不友好——每个文件都需要独立处理上传和关联,这时候还是得写专门的上传程序。至于怎么实现,那就是另一个话题了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8