百度UEditor 1.4.3 ASP版上传到服务器不能上传图片的解决方案

来源:移动时代  时间:2015/8/26 10:20:42
      最近在一个网站建设项目中内容编辑应用了百度的UEditor编辑器,项目完成后发布到远程服务器后却发现原本在本地测试一切都OK,偏偏发布到服务器后就不能上传图片了,单图上传和多图上传都不能用,但是网站自带的上传功能却是可以用的,那么可以证明一点的是,服务器肯定是有写入权限的。
      网上搜了一下,发现很多同行也遇到了同样的问题,其中有些人遇到的可能确实是服务器没有写入权限,但仍有很多人并不是这个问题,所以很多搜出来的答案都说什么“没有写入权限”,完全是坑爹,哪个空间商卖的空间是没有写入权限的? 在给出解决方案前,为了保险起见,咱们还是先自行检测一下,确定是否没有写入权限,当然此检查只是限于使用独立服务器的用户,如果您是购买的虚拟主机那完全不用怀疑空间的写入权限。如果你上传的网站里面有独立上传功能的随便上传一张图,如果上传成功,则表示服务器是有写入权限的,如果不能上传,那就说明确实是服务器没有写入权限,才导致不能上传的。当然ueditor其他版本的也是这样测试。当然也有很多人说是配置问题,但是很明显很多人本地都是测试成功的,只是发布到服务器不能用,说明上传配置是没问题的,所以答案都不靠边,基本都是骗经验的。
      下面长沙营销型网站建设将重点讲述UEditor 1.4.3 ASP版在空间或服务器上不能上传文件的真正原因。由于网上始终找不到真正的解决方案,再加上项目已经做完了,不好临时换编辑器,实在没办法,只能硬着头皮自己解决,终于发现了UEditor坑爹的BUG,这次百度技术员还真是脑洞大开啊,连网站基本的路径都没搞懂?IIS匿名账号居然访问磁盘上的非用户目录,这就是为什么本地测试成功,传到服务器或者空间不能用的原因了,我们空间或服务器给定的账号的访问权限仅限于当前站点的根目录及其子子目录。而UEditor却尝试访问访问根目录的上级。
在Uploader.Class.asp文件中,有一个CheckOrCreatePath函数,这个就是导致文件无法上传的罪魁祸首。
具体文件位置:ueditor/asp/Uploader.Class.asp
解决方法如下:
首先找到这三句代码:
savePath = Server.MapPath(rsFilePath)
CheckOrCreatePath(  GetDirectoryName(savePath) )
stream.SaveToFile savePath
修改成:
savePath = rsFilePath
CheckOrCreatePath(  GetDirectoryName(savePath) )
stream.SaveToFile Server.MapPath(savePath)

修改CheckOrCreatePath函数:
原函数:
Private Function CheckOrCreatePath( ByVal path )
        Set fs = Server.CreateObject("Scripting.FileSystemObject")
        Dim parts
        parts = Split( path, "\" )
        path = ""
        For Each part in parts
            path = path + part + "\"
            If fs.FolderExists( path ) = False Then
                fs.CreateFolder( path )
            End If
        Next
End Function

修改成:
Private Function CheckOrCreatePath( ByVal path )
        Set fs = Server.CreateObject("Scripting.FileSystemObject")
        Dim parts,root
root  = "/"
        parts = Split( path, "/" )
        path = ""
        For Each part in parts
if trim(part) <> "" then
path = path + part + "/"
If fs.FolderExists( Server.MapPath(root & path) ) = False Then
fs.CreateFolder( Server.MapPath(root & path) )
End If
end if
        Next
End Function
其实问题就是原代码中savePath作为参数传给CheckOrCreatePath处理时,是个绝对的物理路径,而在CheckOrCreatePath函数中会对路径地址拆分判断路径中的目录是否存在,如果不存在则新建存储目录,想法没错,只是做法不对,所以将savePath改成相对路径,然后再将目录地址定位到站点根目录root = "/",再通过Server.MapPath获取到目录的真实路径,此时获取到的目录路径就不会涉及到根目录的上级目录。湖南移动时代提醒凡用UEditor 1.4.3 ASP版这个必须得改的,不然真就只能在本地用用了。

本文由移动时代技术原创,尊重他人劳动成果,转载请注明出处。http://www.movenow.cn/ueditor/
 
版权所有http://www.movenow.cn(湖南移动时代)转载请注明出处
分享到:
本文标签:
  • 您可以通过以下联系方式,或在页面右侧给我们留言
  • 我们的服务时间:08:00-18:00
    座机:0731-84411232  传真:0731-85140740
    网址:http://www.movenow.cn

Copyright©2006 - 2015 湖南省移动时代科技有限公司 All Rights Reserved