webuploader 上传、回显、预览、删除

因为 webuploader 不支持已上传文件回显,尤其是文件上传成功之后,旋转、删除功能,原有代码是隐藏的。修改这些功能花费了不少时间、特此记录下。以下只展示关键代码,完整代码在 github 上 upload.js

html 部分

<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<script type="text/javascript">
var path="<%=path%>";
//下载已经上传到服务器的文件
function downloadServerFile(id){
	window.location.href=path+"/AssessmentAction/downloadFile?id="+id;
}
</script>
<link rel="stylesheet" type="text/css" href="<%=path%>/resources/lib/webuploader/0.1.5/webuploader.css">
<link rel="stylesheet" type="text/css" href="<%=path%>/resources/lib/webuploader/0.1.5/css/style.css">
<script type="text/javascript" src="<%=path%>/resources/lib/webuploader/0.1.5/webuploader.js"></script>
<script type="text/javascript" src="<%=path%>/resources/lib/webuploader/js/upload.js"></script>
<div id="uploader">
	<div class="queueList">
		<div id="dndArea" class="placeholder">
			<div id="filePicker"></div>
			<p>或将附件拖到这里,单次最多可选10个</p>
		</div>
	</div>
	<div class="statusBar" style="display:none;">
		<div class="progress">
			<span class="text">0%</span>
			<span class="percentage"></span>
		</div><div class="info"></div>
		<div class="btns">
			<div id="filePicker2"></div><div class="uploadBtn">开始上传</div>
		</div>
	</div>
</div>

upload.js

文件上传之后,把原有的旋转、删除功能释放出来。删除本地文件时,同时删除服务器上的文件。

uploader.on( 'uploadSuccess', function( file,response ) {
	//服务端文件ID
	var fileId=response.id;
	
	var $li_suc = $("#"+file.id),
	$btns_suc = $('<div class="file-panel">' +
		'<span class="cancel">删除</span>' +
		'<span class="rotateRight">向右旋转</span>' +
		'<span class="rotateLeft">向左旋转</span></div>').appendTo($li_suc);
	$li_suc.on( 'mouseenter', function() {
		$btns_suc.stop().animate({height: 30});
	});

	$li_suc.on( 'mouseleave', function() {
		$btns_suc.stop().animate({height: 0});
	});
	$btns_suc.on( 'click', 'span', function() {
		var index = $(this).index(),
			deg;

		switch ( index ) {
			case 0:
				layer.confirm('确认要删除吗?',function(index){
					$.ajax({
						type: "get",
						url: path+"/AssessmentAction/deleteFile",
						data: {"id":fileId},
						dataType: "json",
						success: function(data){
							if(data.result){
								uploader.removeFile( file );
								layer.msg('删除成功!',{icon:1,time:1000});
							}else{
								layer.msg('删除失败!',{icon:1,time:1000});
							}
							layer.close(index);
						}
				   });
				});
				return;

			case 1:
				file.rotation += 90;
				break;

			case 2:
				file.rotation -= 90;
				break;
		}

		if ( supportTransition ) {
			deg = 'rotate(' + file.rotation + 'deg)';
			$li_suc.find(".imgWrap").css({
				'-webkit-transform': deg,
				'-mos-transform': deg,
				'-o-transform': deg,
				'transform': deg
			});
		} else {
			$li_suc.find(".imgWrap").css( 'filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ (~~((file.rotation/90)%4 + 4)%4) +')');
		}
	});
});

初始化已上传到服务端的文件,并回显、预览

var getFileBlob = function (url, cb) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  xhr.responseType = "blob";
  xhr.addEventListener('load', function() {
	  cb(xhr.response);
  });
  xhr.send();
};	

var blobToFile = function (blob, fileObj) {
  blob.lastModifiedDate = new Date();
  blob.name = fileObj.name;
  blob.size = fileObj.size;
  blob.id = fileObj.id;
  blob.ext = fileObj.ext;
  return blob;
};

var getFileObject = function(fileObj, cb) {
  getFileBlob(fileObj.url, function (blob) {
	  cb(blobToFile(blob, fileObj));
  });
};
//图片回显实现end

//初始化已经上传到服务器上的文件
function initFileList(){
    //从服务端请求已上传文件列表,$businessId为文件关联的业务逻辑ID
	$.ajax({
		 type: "post",
		 url: path+"/AssessmentAction/getFiles",
		 data: {"businessId":$businessId},
		 dataType: "json",
		 success: function(data){
			 console.log(JSON.stringify(data));
			 if(data&&data.length>0){
				 $.each(data,function(index,obj){
					 var obj = {
						  id: obj.id,
						  name : obj.fileName,
						  size:obj.size,
						  lastModifiedDate:"",
						  ext:obj.ext,
						  url:path+obj.filePath
						};
					 //创建文件对象
					 getFileObject(obj, function (fileObject) {
						var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject);
						var file = new WebUploader.File(wuFile);
						//因为File中有自己的id生成策略,需要覆盖
						file.id=obj.id;
						file.isServer=true;
						file.setStatus("complete");
						uploader.addFiles(file);
					 })
				 });
			 }
		  }
	 });
}
initFileList();

回显参照:

首先向图片转成File类型,然后通过addFiles把图片添加到队列。

//初始化
var uploader = WebUploader.Uploader({...});

var getFileBlob = function (url, cb) {
  var xhr = new XMLHttpRequest();
  xhr.open("GET", url);
  xhr.responseType = "blob";
  xhr.addEventListener('load', function() {
  cb(xhr.response);
  });
  xhr.send();
};

var blobToFile = function (blob, name) {
  blob.lastModifiedDate = new Date();
  blob.name = name;
  return blob;
};

var getFileObject = function(filePathOrUrl, cb) {
  getFileBlob(filePathOrUrl, function (blob) {
  cb(blobToFile(blob, 'test.jpg'));
  });
};

//需要编辑的图片列表
var picList = ['图片url','图片url','图片url','图片url' ]
$.each(picList, function(index,item){
  getFileObject(item, function (fileObject) {
    var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject);
    var file = new WebUploader.File(wuFile);
    uploader.addFiles(file)
  })
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值