webuploader实现单图片上传到七牛云存储且预览

使用百度的webuploader上传图片且预览的效果图:

webuploader实现单图片上传到七牛云存储且预览_第1张图片

一、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

你可能感兴趣的:(jquery,webuploader,七牛,ajax图片上传,单图片上传)