[TOC]
# 图片上传
不知道大家注意到没有,在我们整合系统的过程中,经常发现图片上传出现的问题!为什么这样说呢?
因为有各种上传组件的方式,我们目前采用的是 swfupload ,而且目前上传的方式还有很多很多,比较知名的有 webuploader、uploadify等等!
我们逐一来分析,我们将来会用百度的 `webuploader`。在用之前,我们先来分析我们目前的上传图片形式!
## 一、swfupload
我们在用 `ThinkCMF` 所用的图片上传方式是:`swfupload`。
它完全参照 `PHPCMS` 的上传方式,甚至绝大多数的代码都是参考 `PHPCMS` !
因此,严格意义上说,我认为它的代码方式还是不太严谨!我们需要进一步地分析,以求更精进!!!
### 1、大总结
在我们所用 `Newthink` 只需要两句关键代码就可以进行上传!如下所示:
```
<input type="hidden" name="slide_pic" id="thumb" value="">
<a href="javascript:void(0);" onclick="flashupload('thumb_images', '附件上传','thumb',thumb_images);return false;"></a>
```
这两句代码,我们一般把 `flashupload` 中的`thumb` 这一句代码修改为对应的名称就可以用了!!!
其他3个参数可以自定义!
> 需要说明的时:我把 flashupload 的8个参数精减为4个参数!但考虑之前使用的其他代码,暂时其代码不做整体修改!
### 2、代码
在“添加幻灯”页面 `/admin/themes/simplebootx/Admin/Slide/add.html` ,我们可以看到如下关键部分代码:
源代码如下所示:
```
<input type="hidden" name="slide_pic" id="thumb" value="">
<a href="javascript:void(0);" onclick="flashupload('thumb_images', '附件上传','thumb',thumb_images,'1,jpg|jpeg|gif|png|bmp,1,,,1','','','');return false;">
<img src="__TMPL__Public/assets/images/default-thumbnail.png" id="thumb_preview" width="135" style="cursor: hand" />
</a>
<input type="button" class="btn btn-small" onclick="$('#thumb_preview').attr('src','__TMPL__Public/assets/images/default-thumbnail.png');$('#thumb').val('');return false;" value="取消图片">
```
### 3、步骤
上边的代码有些多,我们逐一对其解析讲解!
#### 步骤1、input 表单
`<input type="hidden" name="slide_pic" id="thumb" value="">`这句代码是把幻灯的名称`slide_pic`作为一个`input`隐形输入框,将其赋值为`thumb`
#### 步骤2、onclick 单击事件 及8个参数(有用的仅为4个)
`<a href="javascript:void(0);" onclick="flashupload('thumb_images', '附件上传','thumb',thumb_images,'1,jpg|jpeg|gif|png|bmp,1,,,1','','','');return false;"></a>`
这句看似平淡无奇的代码,却是最关键的部分,为什么这么说呢,通过`javascript:void(0);`不让这句代码进行任何操作也就是说不进行超链接跳转,通过 `onclick` 事件进行点击进行图片上传的操作函数`flashupload()`,这一句是至关重要的!!下面我们着重来讲一下它的使用及来源!
`flashupload` 这一个函数所在位置是在 `/public/js/content_addtop.js` 35行,关键代码如下:
```
function flashupload(uploadid, name, textareaid, funcName, args, module, catid, authkey)
```
![](https://box.kancloud.cn/2016-09-04_57cb7f1c70046.png)
我们看到,它包含8个参数,那这8个参数有什么作用呢?下面我们一一说一下,它的作用!
**8个参数作用如下:**
**a.`uploadid` 是这个弹出框的ID名称。**
我们这里叫“thumb_images”(是我们自己起的名字),如图所示:
![](https://box.kancloud.cn/2016-09-04_57cb7f1c8dcdc.png)
**b.`name`这是我给这个弹出框起的名称。**
我们这里叫“附件上传”(是我们自己起的名字),如图所示:
![](https://box.kancloud.cn/2016-09-04_57cb7f1ca59cf.png)
**c.`textareaid` 是最后数据返回插入的容器id。**
我们这里叫`thumb`(不是我们起的名字),那它是从哪里来的呢?就是第1步我们的隐藏框`<input type="hidden" name="slide_pic" id="thumb" value="">` 这里的`id`值`thumb`就是我们这里要填写的`textareaid`的值,如图所示:
![](https://box.kancloud.cn/2016-09-04_57cb7f1cbc4ca.png)
**d.`funcName` 这是个回调函数(这个是我们已经定义好的函数)。**
刚开始接触`js`的人,不清楚什么是回调函数,回调函数的意思也就是说:我上传完图片了,需要再执行什么函数。我们这里执行的是`thumb_images`,那么这个函数是干什么的呢?我们还可以在这个文件里查找到`/public/js/content_addtop.js`的164行,如下所示:
![](https://box.kancloud.cn/2016-09-04_57cb7f1cd3d2e.png)
**问:那它有什么作用呢?**
答:它就是回调后进行预览所用!也就是说:我刚才把图片上传了上去,怎么才能显示到前端呢?需要预览!预览!这是其中关键的一步!!
**e.`args` 参数。**
我们这里定义的是 `'1,jpg|jpeg|gif|png|bmp,1,,,1'`,我最开始看时有些一头雾水,很明显 **6个参数** 用5个逗号隔开!那这6个参数是怎么来的呢???
通过下边的代码,我们很容易猜出来!是`swfupload`所需要的一些参数!
`'index.php?a=swfupload&m=asset&g=asset' + args + setting`(这句代码就有问题,应该是 g m a 的顺序,不过这样也能运行,习惯而已!)
那这6个参数是做什么用的呢?下边我们一一讲解!
首先:swfupload在哪里,上边的代码已经告诉我们了,位置在 `newthink\application\Asset\Controller`,如下图所示:
![](https://box.kancloud.cn/2016-09-04_57cb7f1cebaa1.png)
![](https://box.kancloud.cn/2016-09-04_57cbc4e83d64a.png)
> 这6个参数有点儿乱,不知道该怎么说?后来才发现,它是完全参照 PHPCMS 的上传方式!!因此这块儿我们不做考虑!!
**f.module 所属模块**
其实没用,可以去掉!完全抄 `PHPCMS`!
**g.catid 栏目id**
其实没用,可以去掉!完全抄 `PHPCMS`!
**h.authkey 参数密钥,验证args**
其实没用,可以去掉!完全抄 `PHPCMS`!
#### 步骤3、默认图片
```<img src="__TMPL__Public/assets/images/default-thumbnail.png" id="thumb_preview" width="135" style="cursor: hand" />```
这里默认图片为
![](https://box.kancloud.cn/2016-09-04_57cb7f1d0d0ba.png)
#### 步骤4、取消已上传图片恢复默认
`<input type="button" class="btn btn-small" onclick="$('#thumb_preview').attr('src','__TMPL__Public/assets/images/default-thumbnail.png');$('#thumb').val('');return false;" value="取消图片">`
这里其实很简单,有两步操作
一是:通过 `attr` 恢复默认显示
二是:将隐藏输入框用 `val` 赋为空值!
![](https://box.kancloud.cn/2016-09-04_57cb7f1d219a5.png)
## 二、WebUploader
暂时没有!
- 前言
- 第一章 基础知识
- 图片上传
- 第二章 功能模块数据字典
- 1.1门户管理
- 门户管理模块
- term_relationships 文章分类对应表
- terms 文章分类表
- posts 文章表
- 1.2课程系统
- 课程系统模块
- card 点卡管理
- cardtype 点卡类型
- application 申请教师
- course 课程管理
- coursetype 课程分类
- label 标签管理
- material 资料列表
- order 订单管理
- section 课时管理
- teacher_order 教师审核
- tixian 提现
- usercourse 用户课程
- users 用户表
- 1.3家庭档案(健康家)
- 家庭档案模块
- family_files 家庭档案表
- file_classify 家庭档案分类表
- users_health 健康家用户
- 1.4商城系统
- 商城系统模块
- 商城配置
- 商品-订单模块
- 2.1系统设置
- 系统设置模块
- option 全站配置表
- 3.1用户管理
- 用户管理模块
- users 用户表
- oauth_user 第三方用户表
- user_favorites 用户收藏表
- common_action_log 点赞记录表
- 3.2RBAC管理
- RBAC管理模块
- role 角色表
- role_user 用户角色对应表
- auth_access 权限授权表
- auth_rules 权限规则表
- 3.3菜单管理
- 菜单模块
- menu 后台菜单表
- nav 前台导航表
- nav_cate 前台导航分类表
- route URL路由表
- 4.1评论管理
- 评论管理模块
- comments 评论表
- 4.2幻灯管理
- 幻灯管理模块
- slide 幻灯片表
- slide_cat 幻灯片分类表
- 4.3友情链接模块
- links 友情链接表
- 4.4广告管理模块
- ad 广告表
- 4.5留言管理
- guestbook 留言表
- 4.6 微信管理模块
- wx_user 微信用户
- wx_keyword 关键词
- wx_menu 微信菜单
- wx_text 文本回复
- wx_img 微信图文
- wx_news 图文消息?
- 5.1插件管理模块
- 插件模块
- plugins 插件表
- district 中国省市区乡镇数据表
- 5.2扩展工具
- asset 资源表
- famous 名人名言表
- 区域管理
- region 区域管理
- 第三章 系统模块
- 门户系统
- 教学系统
- 博客系统
- 医疗系统
- 商城系统
- 一站式检测系统
- 第四章 视频教程
- 4.1 NewThink视频教程
- 4.2 ApiCloud视频教程
- 4.3 ThinkPHP视频教程
- 4.4 JQuery视频教程
- 4.5 PHP视频教程
- 4.6 IOS视频教程
- 第五章 PHP加解密
- 5.1 PHP解密
- 5.2 PHP加密
- 第六章 后台菜单
- 第七章 前端模块
- 下拉刷新
- 轮播特效
- 获得焦点时-加黑色蒙版动画
- 获得焦点时-图片抖动动画
- 导航下拉隐藏上拉显示
- 菜单高亮显示
- 商品大菜单
- 六宫格
- 第八章 工具类
- 相关知识
- 附件一:nav.php
- git冲突的解决办法