asp.net 独立Discuz头像编辑模块分离打包

主要内容:

版权声明
头像上传和编辑的原理
独立头像上传及编辑模块
一、版权声明
由于此模块核心均来自于Discuz NT,根据相关规定:"禁止在 Discuz! / UCenter 的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。"
因此在开始下面的内容之前声明如下:

本程序仅为个人学习研究,不以营利为目的,如若侵犯他人利益,请发送邮件KenshinCui@hotmail.com联系作者,本人获得通知后立即删除相关内容,其他第三方下载者或使用者在使用时注意其内容版权归北京康盛新创科技有限责任公司 所有。

二、头像上传和编辑的原理
在Discuz中头像上传和编辑主要通过flash来完成,它处理了包括文件上传和裁切的主要核心工作,但是我们这里没有.fla源文件,只有.swf文件,所以要弄清其原理就必须跟踪相关的接口调用。

在此之前我们首先需要了解在Discuz中flash的页面代码是通过document.write动态生成的,其中的输出的字符串是通过调用AC_FL_RunContent()这个js方法(这个方法在common.js中)。它主要是生成相关falsh的html布局代码,结构大致如下:

代码如下:

<object width="540" height="253" id="mycamera" name="mycamera" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" >
<param name="scale" value="exactfit" />
<param name="movie" value="/images/common/camera.swf?nt=1&inajax=1&appid=67111770b37d9fc06c56e691c013b685&input=Jv5BQ48IKF4=&ucapi=http%3a%2f%2fkenshincui-pc%3a305%2ftools%2fajax.aspx" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="wmode" value="transparent" />
<param name="menu" value="false" />
<param name="swLiveConnect" value="true" />
<param name="allowScriptAccess" value="always" />
</object>

在上面的代码中最重要的就是movie参数,它定义了头像名称、裁切上传api路径以及flash所在路径等。
有了这些信息之后我们只需要了解相关接口调用接口,这时我们可以打开fiddler进行跟踪:


在首次到达头像修改界面的时候访问了/images/common/camera.swf?nt=1&inajax=1&appid=1036681732c9187901d4693bf1ab8416&input=DCdSBXIA4rY=&ucapi=http%3a%2f%2f192.168.1.92%3a312%2ftools%2fajax.aspx

这就是上面我们说的movie参数的值,由于像input(后面我们会发现它就是头像图片的名称)等信息需要是动态设定的,所以Discuz设计的时候采用动态生成js的方法。

接着我们上传一张照片:

从跟踪可以看到访问路径/tools/ajax.aspx?m=user&inajax=1&a=uploadavatar&appid=1036681732c9187901d4693bf1ab8416&input=DCdSBXIA4rY%3D&agent=null&avatartype=null,它是主要负责处理照片上传的,其中的a参数告诉ajax.aspx执行何种操作(事实上后面我们会发现a为uploadavatar则执行上传操作),input参数同上面一样,是头像图片的名称。

然后我们执行裁切:

从Fiddler中我们可以看到请求路径为/tools/ajax.aspx?m=user&inajax=1&a=rectavatar&appid=1036681732c9187901d4693bf1ab8416&input=DCdSBXIA4rY%3D&agent=null&avatartype=null,这是a参数变成了rectavatar,其他信息基本和上一步操作一致,经过分析我们可以看到这一步对应的是裁切保存操作。

有了上面的分析我们可以大概了解到在Discuz中整个头像上传及编辑功能大概的原理,我们发现在代码实现部分主要就是ajax.aspx这个页面,因此我们可以打开这个页面对其进行修改去掉同Discuz自身业务无关的东西,形成一个独立的小组件。

三、独立头像上传及编辑模块

有了上面的分析之后我们要独立上传模块并不太难。首先我们可以将ajax.aspx独立出来去掉其中和具体业务有关的代码,只保留上传和保存操作,并将其路径设计为可配置的。其次我们可以将动态生成flash布局代码的方式改为静态的,因为对我们来说其他参数都不重要,重要的就是图片保存名称而已,这个过程中我们经过加工可以将其网络路径设置为动态获取的(原来Discuz中是在安装过之后设置死的)。最后我们将flash其相关文件拷贝到项目中就可以了,这其中除了.swf文件还有多国原因包用到的locale.xml,以及本地跨域文件crossdomain.xml。

OK,说了那么多下面看看我们独立出来的模块如何使用吧。

首先这个独立头像编辑模块目录结构如下:

使用时只需要拷贝bin中的PhotoEditor.dll拷贝到站点bin目录中;将crossdomin.Js、Ajax.aspx、photoEdit.htm、js目录、images目录放到站点根目录中,然后在Web.config添加如下配置:

代码如下:

<add key="ImagePath" value="images"/><!--图片存放的相对路径-->
<add key ="TempFilePath" value="images/upload"/><!--上传的临时文件路径-->
<add key="ImageSize" value="all"/><!--图片大小,支持三种,分别是large、medium、small,如果使用三种则配置为all-->

当然其中的图片路径即生成的照片路径都可以根据情况修改的。
在使用过程中只需要调用photoEdit.js中的SetPhotoName()传递图片名称即可(可以通过后两个参数设置flash存放路径和Ajax.aspx地址):

代码如下:

<script type="text/javascript" language="javascript">
SetPhotoName("YukoOgura");
</script>

另外SetPhotoName()方法还有两个可选参数,那就是flash文件的路径和处理上传和裁切的Ajax.aspx路径,换句话说这两个路径也是可以随意放的。

下面看看实际效果(通过"拍摄照片"的方式上传和编辑照片的截图比较类似就不再截图了):

上传一张照片:

执行裁切操作:

裁切后生成三种尺寸的图片:

打包下载

(0)

相关推荐

  • PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁

    昨天花了点时间整合了一下头像插件 东拼西凑的成果 先来看下效果 1.先使用ajaxfileupload插件做异步上传.这个地方我本来想做个上传进度的效果,但技术有限失败了.上传按钮我还做了一个文件大小的限制,但是由于浏览器兼容性的问题,不完美在IE6--IE9之间还有很多问题需要解决 getFileSize函数是用于判断文件大小的函数 复制代码 代码如下: function getFileSize(fileName) {                var byteSize = 0;     

  • 关于js拖拽上传 [一个拖拽上传修改头像的流程]

    如今现代的浏览器已经有很多支持拖拽文件读取操作,其优点不再复述.前端时间利用拖拽改进了一下网站的头像上传流程,对其中的要点和实践体会做一点总结. 先看一下总体视图:1. 文件拖拽接受区域要有明显的标示,并且要尽可能的大(由于版面的原因,这个界面的拖放盒子并不大).可以用虚线框盒子等样式吸引用户拖拽文件.最好有明显的文字提示和图标配合. 2. 在交互体验上当文件拖入浏览器窗口时,可以用拖放区变换背景颜色等向用户发起放置操作邀请. 实现代码: 复制代码 代码如下: doc.bind({ 'drage

  • Android根据电话号码获得联系人头像实例代码

    在日常Android手机的使用过程中,根据电话号码获得联系人头像,是经常会碰到的问题.本文即以实例形式讲述了Android根据电话号码获得联系人头像是实现代码.分享给大家供大家参考之用.具体方法如下: 首先,通过ContentProvider,可以访问Android中的联系人等数据.常用的Uri有: 联系人信息Uri:content://com.android.contacts/contacts 联系人电话Uri:content://com.android.contacts/data/phone

  • IOS定制属于自己的个性头像

    本文实例介绍了IOS定制属于自己的个性头像的方法,分享给大家供大家参考,具体内容如下 一.效果图 1.将一张图片剪切成圆形 2.在图片周围显示指定宽度和颜色的边框 二.实现思路 1.效果图中主要由不同尺寸的两大部分组成 蓝色的背景区域,尺寸等于图片的尺寸加上边框的尺寸 图片区域,尺寸等于图片的尺寸 2.绘制一个圆形背景区域,用边框颜色填充 3.绘制一个圆形的图片区域,设置不显示超出的部分 三.实现步骤 1.加载需要显示的图片 UIImage *image = [UIImage imageName

  • Android实现本地上传图片并设置为圆形头像

    先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像. 因为上传图片用到bmob的平台,所以要到bmob(http://www.bmob.cn)申请密钥. 效果图: 核心代码: 复制代码 代码如下: public class MainActivity extends Activity {         private ImageView iv;         private String appKey="";                //填写你的Applicatio

  • 基于jquery.Jcrop的头像编辑器

    用过新浪微博的朋友对它的头像编辑器都有印象吧.不过人家是用flash做的. 在一个项目中,也用到了同样的东西,本来想直接用新浪微博的,但它有一部分请求路径写到FLASH里面去了,所以只好放弃. 在网上找到了jquery.Jcrop,基本满足了我的需求,但它只是简单的切割而已,还有缩略图没有生成.或许有很多人都需要这类东西吧,于是我把它封装起来了,方便其它朋友直接使用. 官方网址:http://deepliquid.com/content/Jcrop.html 上面有很多demo,有兴趣的可以上去

  • JS仿flash上传头像效果实现代码

    先看效果图(在FF下): 下面是我整个的思路: 一.用ajaxFileUpload.js异步上传图片.这个不用多说了,挺简单的东西. 二.div拖拽用jquery-ui.这个也不多说了. 三.上传过图片的处理. 编辑容器是300*300,如果图片不在300*300之内,这里会生成一个maxHeight=300,maxWidth=300的缩略图, 用于设置编辑容器的背景,如果原文件为123.jpg,这里生成的文件为123.jpg.view.jpg,当然,文件123.jpg.view.jpg可能不会

  • asp.net 独立Discuz头像编辑模块分离打包

    主要内容: 版权声明 头像上传和编辑的原理 独立头像上传及编辑模块 一.版权声明 由于此模块核心均来自于Discuz NT,根据相关规定:"禁止在 Discuz! / UCenter 的整体或任何部分基础上以发展任何派生版本.修改版本或第三方版本用于重新分发." 因此在开始下面的内容之前声明如下: 本程序仅为个人学习研究,不以营利为目的,如若侵犯他人利益,请发送邮件KenshinCui@hotmail.com联系作者,本人获得通知后立即删除相关内容,其他第三方下载者或使用者在使用时注意

  • javascript实现div的拖动并调整大小类似qq空间个性编辑模块

    经常上qq空间的朋友一定对qq空间的个性编辑模块印象深刻,可以随意的拖动页面上的元素并且调动大小实现动态布局,当然我每次上csdn博客也会在右下角看见一个新闻窗口,这种效果的确很酷,那么我们也来实现一个吧. 实现步骤: 1.首先是动态创建一个类似这样的html结构: 复制代码 代码如下: <div style="height:200px;width:200px;overflow:hidden" id="a"> <div id="head&

  • vue大型项目之分模块运行/打包的实现

    本文以vue-cli3+为例,实现多系统集成下的分模块打包.分模块打包方式多种多样,下文可适用于多系统之间互不干扰,主系统可集成各子系统,各子系统又可单独运行的业务场景. 一.目标 我们要实现什么?所谓分模块打包,那么各个模块内就必须得有自己独立的入口文件,路由文件.按照这种构想,我在一个新的脚手架src目录下新建了一个projects目录: 如上图,可以看到Aproject.B.C.D四个项目.我在A项目中建了assets,common和views文件夹,其中assets可以再建img和css

  • springboot实现maven多模块和打包部署

    目录 创建多模块项目 依赖关系 开发工具 :idea 工程结构: 父工程father 子模块 dao (用于持久化数据跟数据库交互) 子模块 entity (实体类) 子模块 service (处理业务逻辑) 子模块 web (页面交互接收.传递数据,唯一有启动类的模块) 关系: web依赖 service.dao.entity service依赖 dao.entity dao依赖 entity entity谁都不依赖,独立的 创建多模块项目 new ------file-------proje

  • 详解用webpack把我们的业务模块分开打包的方法

    webpack我自己还在摸索学习中,今天给大家分享个用webpack把我们的业务模块分开打包的方法,顺便留个笔记 如何用webpack打包这3个js? 只需修改webpack的配置文件webpack.config.js: // entry是入口文件,可以多个,代表要编译那些js entry:['./src/main.js','./src/login.js','./src/reg.js'], 这样就可以全部打包,最终生成./build/js/build.js 1,那么如果我们想最后生成不同的文件,

  • java 基于maven多模块合并打包部署的操作过程

    目录 项目环境 项目结构 模块功能 模块间依赖关系 具体POM配置 顶级pom 项目环境 jdk 1.8 spring 2.7.x maven 3.6 项目结构 模块功能 client – 对外servicecommon – 共用工具切面等main – 启动类goods – 子模块具体实现 模块间依赖关系 client – 无依赖common – 无依赖main – client.common.goodsgoods – client.common 具体POM配置 顶级pom 引入需要被使用的所有

  • asp文件用什么软件编辑

    编辑asp文件 记事本:默认的ASP文件双击是不能打开的,一般都会使用记事本对ASP文件进行编辑,但是记事本功能单一,只能进行一些简单的操作,而且当你的ASP文件编码是UTF-8编码的,使用记事本还会出现问题,它会把文件改为带签名的文件,从而会引起很多未知问题. 文本编辑器:为了方便对各种文件的编辑,现在推出了很多文本编辑器,功能十分强大,使用它编辑ASP文件的时候会把很多语法标红,有利于我们判断是否正确书写了函数或者语言结构,当然也不会出现上述篡改签名的情况. 推荐:使用文本编辑器对ASP文件

  • jQuery实现拖拽可编辑模块功能代码

    在没给大家分享实现代码之前,先给大家展示下效果图: 具体实现代码如下所示: index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>iNettuts - Welcome!</title> <link href=&

  • Discuz!NT数据库读写分离方案详解

    目前在Discuz!NT这个产品中,数据库作为数据持久化工具,必定在并发访问频繁且负载压力较大的情况下成 为系统性能的'瓶颈'.即使使用本地缓存等方式来解决频繁访问数据库的问题,但仍旧会有大量的并发请求要访问动态数据,虽然 SQL2005及2008以上版本中性能不断提升,查询计划和存储过程运行得越来越高效,但最终还是 要面临'瓶颈'这一问 题.当然这也是许多大型网站不断研究探索各式各样的方案来有效降低数据访问负荷的原 因, 其中的'读写分离'方案就是一种被广泛采用的方案.      Discuz

  • asp.net与Discuz!NT整合集成实例教程

    但在网上没有找到较详细的描述.方法倒是有很多种. 在此,我就将此次经历写出来,希望对您有用. 在看过这篇文章http://www.jb51.net/article/20851.htm和这篇文章http://www.jb51.net/article/20850.htm按上述文章的描述,先按discuz!nt的用户指南,在windows 2003下安装好论坛. 并以admin进去,添加apikey等. 然后用VS2008新建一项目,添加toolkit.dll和json的引用. 好了, 如果你认真看过

随机推荐