页面写法

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>web uploader测试</title>
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/1.11.0-rc1/jquery.js"></script>
<link rel="stylesheet" type="text/css" href="__PUBLIC__/webup/webuploader.css">
<script type="text/javascript" src="__PUBLIC__/webup/webuploader.js"></script> <div id="uploader-demo">
<!--用来存放item-->
<div id="fileList" class="uploader-list"></div>
<div id="filePicker">选择图片</div>
<div id="upstart">开始上传</div>
<!-- 下面是上传成功返回的图片路径,用户form提交用的 -->
<form action="{:U('index/shangchuan_save')}" method="post"> <div id="upok_result"></div>
<input type="submit" value="save" />
</form>
</div> <script>
var BASE_URL = "__PUBLIC__/webup";
var uploader = WebUploader.create({ // 选完文件后,是否自动上传。
auto: false, // swf文件路径
swf: BASE_URL + '/Uploader.swf', // 文件接收服务端。此为tp3框架的上传方法请求,根据需求和框架修改
server: '{:U("index/shangchuan_up")}', // 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#filePicker', // 只允许选择图片文件。
accept: {
title: 'Images',
extensions: 'gif,jpg,jpeg,bmp,png',
mimeTypes: 'image/jpg,image/jpeg,image/png'
}
});
// 当有文件添加进来的时候
uploader.on( 'fileQueued', function( file ) {
var $li = $(
'<div id="' + file.id + '" class="file-item thumbnail">' +
'<span class="jieguo success">ok</span>'+
'<img class="web_up_img">' +
'<div class="info">' + file.name + '</div>' +
'</div>'
),
$img = $li.find('img'); // $list为容器jQuery实例
$('#fileList').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 );
}, 100, 100 );
});
// 文件上传过程中创建进度条实时显示。
uploader.on( 'uploadProgress', function( file, percentage ) {
var $li = $( '#'+file.id ),
$percent = $li.find('.progress span');
// 避免重复创建
if ( !$percent.length ) {
$percent = $('<p class="progress" style="background-color:red;"><span></span></p>')
.appendTo( $li )
.find('span');
}
$percent.css( 'width', percentage * 100 + '%' );
}); // 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader.on( 'uploadSuccess', function( file,response ) {
if(response.status==1){
//增加这个样式,上传成功的提示就显示出来了
$( '#'+file.id ).addClass('upload-state-done');
//上传成功存到隐藏的div里面用于form提交
var str = "<input type='text' name='photos[]' value='"
+response.msg.file.savepath
+response.msg.file.savename
+"' id='res_"
+file.id
+"' />";
// console.log(str);
$('#upok_result').append(str);
}else{
//上传失败显示提示
$( '#'+file.id ).addClass('upload-state-done-error');
var $li = $( '#'+file.id );
$('<span class="jieguo error">上传失败</span>').prependTo( $li );
} }); // 文件上传失败,显示上传出错。
uploader.on( 'uploadError', function( file ) {
//上传失败显示提示
$( '#'+file.id ).addClass('upload-state-done-error');
var $li = $( '#'+file.id ),
$error = $li.find('span.error'); // 避免重复创建
if ( !$error.length ) {
$error = $('<span class="jieguo error">上传失败</span>').appendTo( $li );
} }); // 完成上传完了,成功或者失败,先删除进度条。
uploader.on( 'uploadComplete', function( file ) {
//删除进度条
$( '#'+file.id ).find('.progress').remove();
//增加删除按钮
$( '#'+file.id ).append('<span class="jieguo success" style="cursor:pointer;" onclick=\'delimg("'+file.id+'")\'>删除</span>');
});
$("#upstart").click(function(){
uploader.upload();
}); //zll 删除图片
function delimg(fileid){
$("#"+fileid).remove();
$("#res_"+fileid).remove();
}
</script>
</body>
</html>

webuploader.css   我也做了一点点修改

.webuploader-container {
position: relative;
float: left;
}
.webuploader-element-invisible {
position: absolute !important;
clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
clip: rect(1px,1px,1px,1px);
}
.webuploader-pick {
position: relative;
display: inline-block;
cursor: pointer;
background: #00b7ee;
padding: 10px 15px;
color: #fff;
text-align: center;
border-radius: 3px;
overflow: hidden;
}
.webuploader-pick-hover {
background: #00a2d4;
} .webuploader-pick-disable {
opacity: 0.6;
pointer-events:none;
}
.uploader-list{
display: flex;
flex-wrap: wrap;
flex-direction: row;
width: 300px;
}
.file-item{
/*height: 150px;*/
width: 100px;
box-sizing: border-box;
margin:5px;
border: 1px solid gray;
padding: 5px;
box-shadow: 0 0 2px 1px grey;
}
.info{
color: white;
background-color: rgba(0,0,0,0.5);
line-height: 20px;
font-size: 12px;
text-align: center;
margin-top: -24px;
position: relative;
height: 20px;
}
.web_up_img{
width: 100%;
}
#upstart{
background-color: #669584;
color: white;
width: 94px;
height: 41px;
line-height: 41px;
text-align: center;
border-radius: 3px;
float: left;
margin-left: 10px;
}
.jieguo{
display: none;
color: white;
text-align: center;
font-size: 12px;
height: 14px;
line-height: 14px;
}
.success{
background-color: green;
}
.error{
background-color: red;
}
.upload-state-done .success{
display: block;
}
.upload-state-done-error .error{
display: block;
}

tp3框架的上传方法

public function shangchuan_up(){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
// $this->error($upload->getError());
$this->ajaxReturn(array('status'=>0,'msg'=>$upload->getError()));
}else{// 上传成功
$this->ajaxReturn(array('status'=>1,'msg'=>$info));
}
}

webuploader 小demo的更多相关文章

  1. 新手 gulp+ seajs 小demo

    首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1 ...

  2. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  3. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  4. Nancy之基于Self Hosting的补充小Demo

    前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...

  5. [Unity3D]做个小Demo学习Input.touches

    [Unity3D]做个小Demo学习Input.touches 学不如做,下面用一个简单的Demo展示的Input.touches各项字段,有图有真相. 本项目已发布到Github,地址在(https ...

  6. Android -- 自定义View小Demo,动态画圆(一)

    1,转载:(http://blog.csdn.NET/lmj623565791/article/details/24500107),现在如下图的效果: 由上面的效果图可以看到其实是一个在一个圆上换不同 ...

  7. Win10 FaceAPI小demo开发问题汇总

    Win10 FaceAPI小demo开发问题汇总 最近使用微软牛津计划做一个小demo,使用FaceAPI做一个小应用,实现刷脸的功能.开发的过程中用到几个问题,具体如下: Stream 与IRand ...

  8. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  9. Android学习小Demo一个显示行线的自定义EditText

    今天在处理一个EditText的时候,想着把EditText做成像一本作业本上的纸一样,每一行都可以由线条隔开,具体效果如下: 1)最开始的思路 一开始的想法是很简单的,找出每一行的高度,然后一行一行 ...

随机推荐

  1. SVN无法提交,路径找不到问题的解决方案

    自己有了个云服务器,只在上面搭建了几个博客网站(小雷网等). 我自己的代码,保存在SVNChina上,每年99元.(私人的付费,开源的免费) 云服务器,闲着也是闲着,决定在上面搭建一个属于自己的SVN ...

  2. golang 数组

    数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 在Go语言中数组 ...

  3. IOS经常使用的性能优化策略

    1.用ARC管理内存 2.对于UITableView使用重用机制 3.UIView及其子类设置opaque=true 4.主进程是用来绘制UI的,所以不要堵塞 5.慎用XIB,由于XIB创建UIVie ...

  4. C语言之函数指针、回调函数的使用

    一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...

  5. WPF 入门《常用控件》

    1.GroupBox 注意: GroupBox仍然需要布局容器来放置元素.如: StackPanel面板 <GroupBox Header="select number?"& ...

  6. Android Studio中怎样引用图片资源

    随着不断接触Android Studio,越来越发现和Eclipse有着巨大的差别. 不管是表面的目录结构,还是内在对各种资源的管理. 本篇就来聊聊Android Studio中怎样来显示图片. 以及 ...

  7. [React] Call setState with null to Avoid Triggering an Update in React 16

    Sometimes it’s desired to decide within an updater function if an update to re-render should be trig ...

  8. Eclipse导入Maven项目出现错误:Unsupported IClasspathEntry kind=4

    使用Eclipse导入Maven项目失败,提示: An internal error occurred during: "Importing Maven projects". Un ...

  9. Eclipse使用方法和技巧二十七:定义自己的高速联想词

    某天在调试代码的时候.尽管是android的project还是习惯的输入syso.然后在ALT+/一下. 旁边的同事就问了一下,这个log打印输出的tag是什么. 接着又问了为什么syso可以智能联想 ...

  10. 3.lombok系列3:lombok的实验类特性

    转自:https://blog.csdn.net/54powerman/article/details/72516755 lombok除了已经推荐使用的基本功能,还维护了一个创新型的注解,有些功能有违 ...