使用百度的webuploader上传图片且预览的效果图:
一、index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>百度图片上传</title>
<!--引入CSS-->
<link rel="stylesheet" type="text/css"
href="webuploader/webuploader.css">
<!--引入JS-->
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-json-2.4.js"></script>
<script type="text/javascript" src="webuploader/webuploader.js"></script>
<script type="text/javascript" src="webuploader/getting-started-qiniu.js"></script>
</head>
<body>
<!--dom结构部分-->
<div id="uploader-demo">
<!--用来存放item-->
<div id="fileList" class="uploader-list"></div>
<div id="filePicker">选择图片</div>
</div>
</body>
</html>
二、webuploader/getting-started-qiniu.js
// 单图片上传demo
jQuery(function() {
var $ = jQuery, $list = $('#fileList'),
// 优化retina, 在retina下这个值是2
ratio = window.devicePixelRatio || 1,
// 缩略图大小
thumbnailWidth = 100 * ratio, thumbnailHeight = 100 * ratio,
// Web Uploader实例
uploader;
// 初始化Web Uploader
uploader = WebUploader.create({
// 自动上传。
auto : true,
// swf文件路径
swf : 'webuploader/Uploader.swf',
// 文件接收服务端。
server : 'http://up.qiniu.com/',
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick : '#filePicker',
// 只允许选择文件,可选。
accept : {
title : 'Images',
extensions : 'gif,jpg,jpeg,bmp,png',
mimeTypes : 'image/*'
},
// 上传文件个数
fileNumLimit : 1,
// 全局设置, 文件上传请求的参数表,每次发送都会发送此对象中的参数。
formData: {
token : 'zi1OZ8VhS6nZ0YRAc6NcCCjKR8m2OaTWxKWPl7Hy:ObKB-V4Y2lK6Mbt1bTigBACRGEI=:eyJzY29wZSI6ImRqc3BhY2UiLCJkZWFkbGluZSI6MTQzOTU2OTg1MX0='
}
});
// 当有文件添加进来的时候
uploader.on('fileQueued', function(file) {
var $li = $('<div id="' + file.id + '" class="file-item thumbnail">'
+ '<img>' + '<div class="info">' + file.name + '</div>'
+ '</div>'), $img = $li.find('img');
$list.html($li);
// 创建缩略图
uploader.makeThumb(file, function(error, src) {
if (error) {
$img.replaceWith('<span>不能预览</span>');
return;
}
$img.attr('src', src);
}, thumbnailWidth, thumbnailHeight);
});
//局部设置,给每个独立的文件上传请求参数设置,每次发送都会发送此对象中的参数。。参考:https://github.com/fex-team/webuploader/issues/145
uploader.on('uploadBeforeSend', function( block, data, headers) {
data.key = new Date().toLocaleTimeString();
});
// 文件上传过程中创建进度条实时显示。
uploader.on('uploadProgress', function(file, percentage) {
var $li = $('#' + file.id), $percent = $li.find('.progress span');
// 避免重复创建
if (!$percent.length) {
$percent = $('').appendTo($li)
.find('span');
}
$percent.css('width', percentage * 100 + '%');
});
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
uploader.on('uploadSuccess', function(file) {
$('#' + file.id).addClass('upload-state-done');
});
// 文件上传失败,现实上传出错。
uploader.on('uploadError', function(file) {
var $li = $('#' + file.id), $error = $li.find('div.error');
// 避免重复创建
if (!$error.length) {
$error = $('<div class="error"></div>').appendTo($li);
}
$error.text('上传失败');
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader.on('uploadComplete', function(file) {
$('#' + file.id).find('.progress').remove();
});
uploader.on('uploadAccept', function(file, response) {
console.log($('#' + file.id).html());
console.log($.toJSON(response));
if (response.code == 1) {
// 通过return false来告诉组件,此文件上传有错。
return false;
}
});
// 先从文件队列中移除之前上传的图片,第一次上传则跳过
$("#filePicker").on('click', function () {
if (!WebUploader.Uploader.support()) {
var error = "上传控件不支持您的浏览器!请尝试升级flash版本或者使用Chrome引擎的浏览器。<a target='_blank' href='http://se.360.cn'>下载页面</a>";
console.log(error);
return;
}
var id = $list.find("div").attr("id");
if (undefined != id) {
uploader.removeFile(uploader.getFile(id));
}
});
});
三、webuploader/webuploader.css
.webuploader-container {
position: relative;
}
.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;
}
四、百度webuploader比较灵活,通过html5实现文件的ajax上传,不支持html5的浏览器使用flash支持图片上传,而且一个页面可以同时支持单图片上传和视频上传实例,也就是说一个页面可以支持多个实例,具体使用参考api:http://fex.baidu.com/webuploader/doc/index.html