• Discuz!NT Flash无法上传头像,点击上传后无任何反应


    最近在对一个Discuz!NT论坛的老项目进行维护和二次开发,遇到了论坛无法上传头像的问题。在网上找了相当多的资料,发现解决的方法基本是无效的。虽然有的状况一样,但是没有解决方法,后来自己研究了下也总算是解决了这个问题。

    首先说明下出现无法上传头像的具体症状,大概的症状有下面这几点:

    1. 使用Flash头像上传时,点击上传图片,然后显示“图片载入中,请稍后的提示信息”和上传进度的百分比,最后却是没有任何的反应。
    2. 网上有部分网友说到进度到10%就没有任何反应,其实只是部分情况,如果传大图片的话会显示其他进度百分百。
    3. 使用超级银光头像上传时,点击上传图片,上传会上传成功,但是随后的预览图片会显示三张不同尺寸的空白图片,头像依然没有任何变化。

     discuz!nt 上传头像无效

    再说下网上说的大部分情况,这里只做参考,毕竟我们的情况和下面关系不太大:

    1. 服务器文件夹权限问题
    2. UC通讯问题(Discuz!NT没有UC通讯)
    3. 所下载的论坛有问题

    网上的说所的大部分情况都是PHP版的Discuz,自从2010年Discuz被腾讯收购以后,不仅Discuz!Nt论坛打不开,而且直到今天也都没有新版本更新。所以有些问题都不知道如何解决,只能自己摸索和研究!就像我遇到的这个Flash无法上传头像的问题,其实最后是需要更改下源代码的,网上基本找不到解决方法。

    问题产生的原因分析和最终解决方法

    主要原因是Discuz!Nt中是有启用URL重写,而项目代码中的Url重写模块有屏蔽掉上传头像的默认图片保存路径,如果访问了上传头像的默认图片路径,是无法打开的图片的,URL会被转移到首页,所以无论如何头像都无法上传成功。

    我们看下论坛源码项目中Web.config配置文件对重写模块的配置:

        <httpModules>
          <add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule" />
        </httpModules>
    

    然后我们在项目中打开自定义的HttpModule类(位置在Discuz.Forum/HttpModule.cs),我们找到下面这段代码(我的项目是在284行,大家自己搜索下):

    else if (requestPath.StartsWith(forumPath + "upload/") || requestPath.StartsWith(forumPath + "space/upload/") || requestPath.StartsWith(forumPath + "avatars/upload/"))
    {
        context.RewritePath(forumPath + "index.aspx");
        return;
    }
    

    我们可以看到在URL重写模块中,只要网页中请求的路径是"upload"、"space/upload/"和"avatars/upload/"这三个文件夹,那么就会将请求的URL重写到网站首页,导致无法获取正确的头像图片URL,错误的头像图片路径造成图片无法正常打开,所以上传头像后会毫无反应。

    另外其中的"upload"文件夹和"avatars/upload/"文件夹都是和头像有关的,我们可以尝试下随便在这两个文件夹下放置一张图片,然后我们在浏览器中直接访问这张图片的URL,我们可以发现图片是打不开的,因为被做了URL重写。

    所以最后我是将这段代码做了注释,运行论坛发现头像已经可以正常的上传了!


    作者:十有三

    出处:http://shiyousan.com/post/635523343543614808

  • 相关阅读:
    前端布局
    mysql默认数据库
    js 计算两个颜色之间的渐变色值 10个色值
    chrome network中的stalled阶段耗时含义
    linux软件源码安装与封装包安装
    如何分辨linux文件颜色
    linux 文件权限
    linux端口查看
    suse linux光盘挂载
    记一次tortoiese git误提交的问题
  • 原文地址:https://www.cnblogs.com/ydfq-home/p/5017199.html
Copyright © 2020-2023  润新知