thinkphp集成webuploader实战
介绍
最近用了下thinkphp搞自己的博客,期间用到了百度的webuploader上传图片。百度出来的参考质量一言难尽,写教程没有一点追求,千篇一律的复制粘贴,某些个作者自己都没搞清楚就发文,误人又误己,特此记录方便自己查阅的同时让大家少走弯路,看这一篇和官方文档足以。
- 参考文档
http://fex.baidu.com/webuploader/doc/index.html#WebUploader_Uploader_removeFile
https://www.kancloud.cn/manual/thinkphp5/155159
效果演示
写教程不上图的都是耍流氓:)

开发步骤
注意:此处演示的是单文件上传,如果要多文件的话去掉配置项中的fileNumLimit。
引入必要的资源
<link href="__STATIC__/common/plugin/webuploader/webuploader.css" rel="stylesheet">
<link href="__STATIC__/common/plugin/webuploader/style.css" rel="stylesheet">
<script src="__STATIC__/common/plugin/webuploader/webuploader.min.js"></script>
添加表单
<div id="uploader-demo" style="margin-top: 10px;">
<!--用来存放item-->
<div id="fileList" class="uploader-list">
</div>
<input type="hidden" id="img_input" name="file_image" value="">
<button onclick="chooseImg(this)" class="btn btn-success" type="button">选择图片</button>
<div id="picker">上传图片</div>
</div>
js脚本
// 缩略图上传
var $list=$("#fileList");
var thumbnailWidth = 150; //缩略图高度和宽度 (单位是像素),当宽高度是0~1的时候,是按照百分比计算,具体可以看api文档
var thumbnailHeight = 150;
var uploader = WebUploader.create({
// 选完文件后,是否自动上传。
auto: true,
// swf文件路径
swf: '/static/common/plugin/webuploader/uploader.swf', //加载swf文件,路径一定要对
// 文件接收服务端。
server: hdjs.uploader,
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#picker',
fileNumLimit: 1, // 单文件上传
// 只允许选择图片文件。
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/'
},
//需要图片压缩则加入以下参数
compress:{
width: 700,
//height: 900,
// 图片质量,只有type为`image/jpeg`的时候才有效。
quality: 90,
// 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
allowMagnify: false,
// 是否允许裁剪。
crop: false,
// 是否保留头部meta信息。
preserveHeaders: true,
// 如果发现压缩后文件大小比原来还大,则使用原来图片
// 此属性可能会影响图片自动纠正功能
noCompressIfLarger: false,
// 单位字节,如果图片大小小于此值,不会采用压缩。
compressSize: 1024
}
});
//上传完成事件监听
uploader.on( 'fileQueued', function(file) {
var $li = $(
//'<div id="' + file.id + '" class="file-item thumbnail">' +
'<div id="WU_FILE_0" class="file-item thumbnail">' +
'<img>' +
'<div class="info">' + file.name + '</div>' +
'<em class="close" style="position:absolute; top: 0px; right: -14px;" title="删除这张图片" οnclick="removeImg(this)">×</em>'+
'</div>'
),
$img = $li.find('img');
// $list为容器jQuery实例
$list.append( $li );
// 创建缩略图
// 如果为非图片文件,可以不用调用此方法。
// thumbnailWidth x thumbnailHeight 为 100 x 100
uploader.makeThumb( file, function( error, src ) {
if ( error ) {
$img.replaceWith('<span>不能预览</span>');
return;
}
$img.attr( 'src', src );
}, thumbnailWidth, thumbnailHeight );
});
// 文件上传成功
uploader.on('uploadSuccess', function(file,ret){
console.log(ret);
$('#arc_thumb').val(ret.saved_path);
});
- 下面是移除图片的函数
function removeImg(obj) {
uploader.removeFile( 'WU_FILE_0' );
$('#WU_FILE_0').remove();
$('#arc_thumb').val('');
}
thinkphp上传代码
//上传文件
public function uploader ()
{
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file( 'file' );
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move( ROOT_PATH . 'public' . DS . 'uploads' );
//halt($info);
if ( $info ) {
// 对windows下反斜线转换为正斜线
$saved_name = str_replace("\\","/",$info->getSaveName());
$data = [
'name' => input( 'post.name' ) ,
'filename' => $info->getFilename() ,
'path' => 'uploads/' . $saved_name,
'extension' => $info->getExtension() ,
'createtime' => time() ,
'size' => $info->getSize(),
];
Db::name( 'attachment' )->insert( $data );
echo json_encode( [ 'valid' => 1 , 'message' => CONTEXT_PATH . 'uploads/' . $saved_name ,'saved_path'=> $saved_name] );
}
else {
// 上传失败获取错误信息
echo json_encode( [ 'valid' => 0 , 'message' => $file->getError() ] );
}
}
thinkphp集成webuploader实战的更多相关文章
- Jenkins持续集成企业实战系列之Jenkins插件下载及邮件配置-----05
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins手动构建-----04
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins配置演示-----03
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战系列之Jenkins持续集成简介及安装-----02
1. Jenkins持续集成简介 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求, ...
- Jenkins持续集成企业实战系列之两种网站部署的流程-----01
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- Jenkins持续集成企业实战
阅读目录: Jenkins持续集成企业实战1.1 目前主流网站部署的流程1.2 Jenkins持续集成简介1.3 Jenkins持续集成组件1.4 Jenkins平台安装部署1.5 Jenkins相关 ...
- Spring Boot 集成 RabbitMQ 实战
Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 ...
- go-micro集成RabbitMQ实战和原理
在go-micro中异步消息的收发是通过Broker这个组件来完成的,底层实现有RabbitMQ.Kafka.Redis等等很多种方式,这篇文章主要介绍go-micro使用RabbitMQ收发数据的方 ...
- Java SpringBoot集成RabbitMq实战和总结
目录 交换器.队列.绑定的声明 关于消息序列化 同一个队列多消费类型 注解将消息和消息头注入消费者方法 关于消费者确认 关于发送者确认模式 消费消息.死信队列和RetryTemplate RPC模式的 ...
- Jenkins 持续集成综合实战
Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建.测试和部署等功能.本文以 CentOS7 环境为例,总结了 Jenkin ...
随机推荐
- SQL联结
1联结 那我们又该如何创建联结呢? So easy! 规定要联结的所有表以及它们如何关联就可以了. 在设置关联条件时,为避免不同表被引用的列名相同,我们需要使用完全限定列名(用一个点分隔表名和列名), ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.10)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]TiDB 数据库的调度
https://docs.pingcap.com/zh/tidb/stable/tidb-scheduling#%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86 PD (Pla ...
- 从DevOps状态报告看技术团队的文化建设
本文源自一次内部分享,借由此机会又把历年的DevOps状态报告翻看了一遍,其实大多数时候我们对于DevOps的理解都在于流程,工具,实践这些看得见摸得着的东西,但就像文末的几点思考所说的那样,我们一直 ...
- 学到一个编码技巧:用重复写入代替if判断,减少程序分支
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 近期阅读了rust标准库的hashbrown库(也就是一个 ...
- vim 从嫌弃到依赖(16)——宏
终于到了我第二喜欢的vim功能了(当然了,最喜欢的是.命令).我原本计划在介绍完.命令之后介绍宏,以便让各位小伙伴们能了解到vim对于重复操作进行的强大的优化.但是由于宏本身跟寄存器息息相关,所以还是 ...
- win10下MySQL安装教程(MySql-8.0.26超级详细)
一.下载安装包: 官网链接:MySQL :: Developer Zone 依次点击步骤如下: 二.MySQL文件配置 解压安装包: 解压后的目录并没有的my.ini文件,没关系可以自行创建在安装根目 ...
- 多智能体强化学习算法【一】【MAPPO、MADDPG、QMIX】
相关文章: 常见多智能体强化学习仿真环境介绍[一]{推荐收藏,真的牛} 多智能体强化学习算法[一][MAPPO.MADDPG.QMIX] 多智能体强化学习算法[二][MADDPG.QMIX.MAPPO ...
- Linux提取日志中的IP地址并去重
原日志文件:logger.log 内容: {"peer":"kts_001","type":"http"," ...
- vue2-ace-editor代码编辑器使用
安装 npm安装 npm install --save-dev vue2-ace-editor 如果需要拷贝到内网,需要 npm安装后 将 vue2-ace-editor 和 brace( vue2- ...