不可否认,百度UEditor是一款非常优秀的web编辑器,近期我们在开发一套软件项目过程中,就使用到这款编辑器,待项本地测试完全没问题后,将文件发布到服务器,却发现,该编辑器的上传图片功能不能使用,但系统默认的上传功能是没问题,这说明服务器该开的权限都开了。
我们在网上搜了一下各种各样的解决方案,什么权限没开等各式各样说法,这些可能是针对该编辑器历史版本解决方案,但对于1.4.3版本来说,完全没有任何作用。
网上始终找不到任何有效解决方案,项目我们已经全部结束,只有这个编辑器小BUG,也不愿意把这么优秀的编辑器换掉,所以我们就硬着头皮来解决这个骨头,解决好之后,后面每个软件开发项目都可以使用到这么优秀的编辑器,何乐不为呢?
下面上海软件开发公司为你重点讲述下这个BUG的原因及解决方案?
归根结底还是路径没弄懂所导致的,IIS服务器中匿名账号可以磁盘上的非用户目录,这就是为什么本地测试成功,传到服务器或者空间不能用的原因了。
找到原因后,我们针对这个问题进行解决,打开Uploader.Class.asp找到CheckOrCreatePath函数,路径不需要我们说了吧
将
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
将这代码COPY进去,绝对没有问题,我们已经将这更改的代码发布到我们实际软件开发项目中了,如果不把这路径问题处理掉的话,那么你上传图片图片永远只能在本地运行,不能在服务器中运行了。