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();

回顯參照:https://blog.csdn.net/WuLex/article/details/99897625

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章