webupload控件实现删除已上传的文件

本文摘自http://www.we7.cc/manual/dev:func:common:app:tpl_appupload_image:html<div id="uploader">
	<div class="queueList">
		<div id="dndArea" class="placeholder">
			<div id="filePicker"></div>
			<p>或将照片拖到这里,单次最多可选30张</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>
 
<script>
require([‘jquery‘, ‘webuploader‘ ], function($, WebUploader) {
	return;
	// 当domReady的时候开始初始化
	$(function() {
		var $wrap = $(‘#uploader‘),
 
			// 图片容器
			$queue = $( ‘<ul class="filelist"></ul>‘ )
				.appendTo( $wrap.find( ‘.queueList‘ ) ),
 
			// 状态栏,包括进度和控制按钮
			$statusBar = $wrap.find( ‘.statusBar‘ ),
 
			// 文件总体选择信息。
			$info = $statusBar.find( ‘.info‘ ),
 
			// 上传按钮
			$upload = $wrap.find( ‘.uploadBtn‘ ),
 
			// 没选择文件之前的内容。
			$placeHolder = $wrap.find( ‘.placeholder‘ ),
 
			$progress = $statusBar.find( ‘.progress‘ ).hide(),
 
			// 添加的文件数量
			fileCount = 0,
 
			// 添加的文件总大小
			fileSize = 0,
 
			// 优化retina, 在retina下这个值是2
			ratio = window.devicePixelRatio || 1,
 
			// 缩略图大小
			thumbnailWidth = 110 * ratio,
			thumbnailHeight = 110 * ratio,
 
			// 可能有pedding, ready, uploading, confirm, done.
			state = ‘pedding‘,
 
			// 所有文件的进度信息,key为file id
			percentages = {},
 
			supportTransition = (function(){
				var s = document.createElement(‘p‘).style,
					r = ‘transition‘ in s ||
						‘WebkitTransition‘ in s ||
						‘MozTransition‘ in s ||
						‘msTransition‘ in s ||
						‘OTransition‘ in s;
				s = null;
				return r;
			})(),
 
			// WebUploader实例
			uploader;
 
		// 实例化
		uploader = WebUploader.create({
			pick: {
				id: ‘#filePicker‘,
				label: ‘点击选择图片‘
			},
			dnd: ‘#dndArea‘,
			paste: ‘#uploader‘,
		 	// swf文件路径
			swf: ‘{$_W[‘siteroot‘]}app/resource/componets/webuploader/Uploader.swf‘,
			// 文件接收服务端。
			server: ‘{$_W[‘siteroot‘]}app/{php echo str_replace(‘./‘,‘‘,url(‘utility/file‘,array(‘do‘=>‘upload‘, ‘type‘=>‘image‘), true))}‘,
			chunked: true,
			// runtimeOrder: ‘flash‘,
			// sendAsBinary: true,
			fileNumLimit: 30,
			fileSizeLimit: 30 * 1024 * 1024,	// 30 M
			fileSingleSizeLimit: 4 * 1024 * 1024	// 1 M
		});
 
		// 添加“添加文件”的按钮,
		uploader.addButton({
			id: ‘#filePicker2‘,
			label: ‘继续添加‘
		});
 
		// 当有文件添加进来时执行,负责view的创建
		function addFile( file ) {
			var $li = $( ‘<li id="‘ + file.id + ‘">‘ +
					‘<p class="title">‘ + file.name + ‘</p>‘ +
					‘<p class="imgWrap"></p>‘+
					‘<p class="progress"><span></span></p>‘ +
					‘</li>‘ ),
				$btns = $(‘<div class="file-panel">‘ +
					‘<span class="cancel">删除</span>‘ +
					‘<span class="rotateRight">向右旋转</span>‘ +
					‘<span class="rotateLeft">向左旋转</span></div>‘).appendTo( $li ),
				$prgress = $li.find(‘p.progress span‘),
				$wrap = $li.find( ‘p.imgWrap‘ ),
				$info = $(‘<p class="error"></p>‘),
 
				showError = function( code ) {
					switch( code ) {
						case ‘exceed_size‘:
							text = ‘文件大小超出‘;
							break;
 
						case ‘interrupt‘:
							text = ‘上传暂停‘;
							break;
 
						default:
							text = ‘上传失败,请重试‘;
							break;
					}
 
					$info.text( text ).appendTo( $li );
				};
 
			if ( file.getStatus() === ‘invalid‘ ) {
				showError( file.statusText );
			} else {
				// @todo lazyload
				$wrap.text( ‘预览中‘ );
				uploader.makeThumb( file, function( error, src ) {
					if ( error ) {
						$wrap.text( ‘不能预览‘ );
						return;
					}
 
					var img = $(‘<img src="‘+src+‘">‘);
					$wrap.empty().append( img );
				}, thumbnailWidth, thumbnailHeight );
 
				percentages[ file.id ] = [ file.size, 0 ];
				file.rotation = 0;
			}
 
			file.on(‘statuschange‘, function( cur, prev ) {
				if ( prev === ‘progress‘ ) {
					$prgress.hide().width(0);
				} else if ( prev === ‘queued‘ ) {
					$li.off( ‘mouseenter mouseleave‘ );
					$btns.remove();
				}
				// 成功
				if ( cur === ‘error‘ || cur === ‘invalid‘ ) {
					console.log( file.statusText );
					showError( file.statusText );
					percentages[ file.id ][ 1 ] = 1;
				} else if ( cur === ‘interrupt‘ ) {
					showError( ‘interrupt‘ );
				} else if ( cur === ‘queued‘ ) {
					percentages[ file.id ][ 1 ] = 0;
				} else if ( cur === ‘progress‘ ) {
					$info.remove();
					$prgress.css(‘display‘, ‘block‘);
				} else if ( cur === ‘complete‘ ) {
					$li.append( ‘<span class="success"></span>‘ );
				}
				$li.removeClass( ‘state-‘ + prev ).addClass( ‘state-‘ + cur );
			});
 
			$li.on( ‘mouseenter‘, function() {
				$btns.stop().animate({height: 30});
			});
 
			$li.on( ‘mouseleave‘, function() {
				$btns.stop().animate({height: 0});
			});
 
			$btns.on( ‘click‘, ‘span‘, function() {
				var index = $(this).index(),
					deg;
 
				switch ( index ) {
					case 0:
						uploader.removeFile( file );
						return;
 
					case 1:
						file.rotation += 90;
						break;
 
					case 2:
						file.rotation -= 90;
						break;
				}
 
				if ( supportTransition ) {
					deg = ‘rotate(‘ + file.rotation + ‘deg)‘;
					$wrap.css({
						‘-webkit-transform‘: deg,
						‘-mos-transform‘: deg,
						‘-o-transform‘: deg,
						‘transform‘: deg
					});
				} else {
					$wrap.css( ‘filter‘, ‘progid:DXImageTransform.Microsoft.BasicImage(rotation=‘+ (~~((file.rotation/90)%4 + 4)%4) +‘)‘);
				}
			});
			$li.appendTo( $queue );
		}
 
		// 负责view的销毁
		function removeFile( file ) {
			var $li = $(‘#‘+file.id);
			delete percentages[ file.id ];
			updateTotalProgress();
			$li.off().find(‘.file-panel‘).off().end().remove();
		}
 
		function updateTotalProgress() {
			var loaded = 0,
				total = 0,
				spans = $progress.children(),
				percent;
 
			$.each( percentages, function( k, v ) {
				total += v[ 0 ];
				loaded += v[ 0 ] * v[ 1 ];
			} );
 
			percent = total ? loaded / total : 0;
 
			spans.eq( 0 ).text( Math.round( percent * 100 ) + ‘%‘ );
			spans.eq( 1 ).css( ‘width‘, Math.round( percent * 100 ) + ‘%‘ );
			updateStatus();
		}
 
		function updateStatus() {
			var text = ‘‘, stats;
 
			if ( state === ‘ready‘ ) {
				text = ‘选中‘ + fileCount + ‘张图片,共‘ + WebUploader.formatSize( fileSize ) + ‘。‘;
			} else if ( state === ‘confirm‘ ) {
				stats = uploader.getStats();
				if ( stats.uploadFailNum ) {
					text = ‘已成功上传‘ + stats.successNum+ ‘张照片至XX相册,‘+
						stats.uploadFailNum + ‘张照片上传失败,<a class="retry" href="#">重新上传</a>失败图片或<a class="ignore" href="#">忽略</a>‘
				}
			} else {
				stats = uploader.getStats();
				text = ‘共‘ + fileCount + ‘张(‘ +
						WebUploader.formatSize( fileSize )  +
						‘),已上传‘ + stats.successNum + ‘张‘;
 
				if ( stats.uploadFailNum ) {
					text += ‘,失败‘ + stats.uploadFailNum + ‘张‘;
				}
			}
 
			$info.html( text );
		}
 
		function setState( val ) {
			var file, stats;
 
			if ( val === state ) {
				return;
			}
 
			$upload.removeClass( ‘state-‘ + state );
			$upload.addClass( ‘state-‘ + val );
			state = val;
 
			switch ( state ) {
				case ‘pedding‘:
					$placeHolder.removeClass( ‘element-invisible‘ );
					$queue.hide();
					$statusBar.addClass( ‘element-invisible‘ );
					uploader.refresh();
					break;
 
				case ‘ready‘:
					$placeHolder.addClass( ‘element-invisible‘ );
					$( ‘#filePicker2‘ ).removeClass( ‘element-invisible‘);
					$queue.show();
					$statusBar.removeClass(‘element-invisible‘);
					uploader.refresh();
					break;
				case ‘uploading‘:
					$( ‘#filePicker2‘ ).addClass( ‘element-invisible‘ );
					$progress.show();
					$upload.text( ‘暂停上传‘ );
					break;
				case ‘paused‘:
					$progress.show();
					$upload.text( ‘继续上传‘ );
					break;
				case ‘confirm‘:
					$progress.hide();
					$upload.text( ‘开始上传‘ ).addClass( ‘disabled‘ );
					stats = uploader.getStats();
					if ( stats.successNum && !stats.uploadFailNum ) {
						setState( ‘finish‘ );
						return;
					}
					break;
				case ‘finish‘:
					stats = uploader.getStats();
					if ( stats.successNum ) {
						alert( ‘上传成功‘ );
					} else {
						// 没有成功的图片,重设
						state = ‘done‘;
						location.reload();
					}
					break;
			}
			updateStatus();
		}
 
		uploader.onUploadProgress = function( file, percentage ) {
			var $li = $(‘#‘+file.id),
				$percent = $li.find(‘.progress span‘);
 
			$percent.css( ‘width‘, percentage * 100 + ‘%‘ );
			percentages[ file.id ][ 1 ] = percentage;
			updateTotalProgress();
		};
 
		uploader.onFileQueued = function( file ) {
			fileCount++;
			fileSize += file.size;
 
			if ( fileCount === 1 ) {
				$placeHolder.addClass( ‘element-invisible‘ );
				$statusBar.show();
			}
 
			addFile( file );
			setState( ‘ready‘ );
			updateTotalProgress();
		};
 
		uploader.onFileDequeued = function( file ) {
			fileCount--;
			fileSize -= file.size;
 
			if ( !fileCount ) {
				setState( ‘pedding‘ );
			}
 
			removeFile( file );
			updateTotalProgress();
		};
 
		uploader.on( ‘all‘, function( type ) {
			var stats;
			switch( type ) {
				case ‘uploadFinished‘:
					setState( ‘confirm‘ );
					break;
				case ‘startUpload‘:
					setState( ‘uploading‘ );
					break;
				case ‘stopUpload‘:
					setState( ‘paused‘ );
					break;
			}
		});
 
		uploader.onError = function( code ) {
			alert( ‘Eroor: ‘ + code );
		};
 
		$upload.on(‘click‘, function() {
			if ( $(this).hasClass( ‘disabled‘ ) ) {
				return false;
			}
			if ( state === ‘ready‘ ) {
				uploader.upload();
			} else if ( state === ‘paused‘ ) {
				uploader.upload();
			} else if ( state === ‘uploading‘ ) {
				uploader.stop();
			}
		});
 
		$info.on( ‘click‘, ‘.retry‘, function() {
			uploader.retry();
		} );
 
		$info.on( ‘click‘, ‘.ignore‘, function() {
			alert( ‘todo‘ );
		} );
 
		$upload.addClass( ‘state-‘ + state );
		updateTotalProgress();
	});
});
</script>
 
时间: 2024-10-25 22:06:46

webupload控件实现删除已上传的文件的相关文章

FileUpload控件如何获取要上传文件的路径

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="BorrowPage.aspx.cs" Inherits="Borrow_BorrowPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/T

ntko的office控件,ssm框架下上传文件到数据库和页面的回显

在这里用到了对文件流进行的操作,废话不多说,先贴代码出来 首先是文件上传到数据库,这里用到了SqlServer数据库,数据库对应数据类型是image,而JAVA实体则对应的是Byte[](比特数组). 首先跟正常上传文件一样,页面上写一个form表单 <form method="post" enctype="multipart/form-data" name="frmWordDoc"> <input type="fil

删除input上传的文件路径

上传文件时,选择了文件后想清空文件路径,搜索了一下,用两种方法解决 <input type="file" id="fileupload" name="file" /> 第一种: var obj = document.getElementById('fileupload') ; obj.select(); document.selection.clear(); 第二种: var obj = document.getElementById

angular-file-upload 回显已上传的文件

环境同前篇随笔,lizi在这里po下js代码 演示地址 http://runjs.cn/detail/o4a55204 <script> 'use strict'; angular.module('app', ['angularFileUpload']) .factory("myService",function(){ var service={ files:function(){ var list= [ { fileName:'git指令.txt', size:3456,

asp net2 0 上传大容量文件第三方控件radupload

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 1.web.config  中需要加入:  <httpHandlers>     <add verb="*" path="Telerik.RadUploadProgressHandler.aspx" type="Telerik.WebControls.RadUploadPro

关于Bootstrap fileinput 上传新文件,移除时触发服务器同步删除的配置

在Bootstrap fileinput中移除预览文件时可以通过配置initialPreviewConfig: [ { url:'deletefile',key:fileid } ] 来同步删除服务器上的文件和记录.但新上传的文件则需要其他方式来同步删除服务器记录. 在配置中遇到的一些问题,记录一下. fileinput在文件上传成功后会触发'fileuploaded'事件,移除图片后会触发'filesuccessremove'事件. 其中在fileuploaded中参数previewId是形如

C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开文件和删除文件功能

在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息,但仅仅是显示信息是不够的,我们还需要具体的操作.在"个人电脑使用历史痕迹"项目中我还需要添加"打开文件"和"删除文件"两种方法.具体如下: 在第一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中显示如下: http://blog.csdn.net/eastmount/article/details/1945310

【轻松一刻】项目代码已上传至开源中国[email&#160;protected]

项目代码已上传至开源中国[email protected],实际上16号左右就改的差不多了,一直耽搁没上传.其中程序中关于趣图的部分我并没有写.其他部分基本完整.主要原因是聚合数据返回的趣图大小不一,且图片尺寸偏小,在1080p和720p的手机上效果都很不好.暂时就不加了.您可以自行找合适的图片接口或者网上爬取合适尺寸的图片,其中图片list的展示与笑话的list展示类似. 后续这个小项目可能也不再更新了. 需要说明的是聚合数据接口的使用是有时间限制的,要想一直使用接口,需要应用上线,并且官网实

Javascript Fromdata 与jQuery 实现Ajax文件上传以及文件的删除

前端HTML代码: <!DOCTYPE html> <html> <head> <title>ajax</title> <script type="text/javascript" src="js/jquery.js"></script> <meta charset="utf-8" /> <style type="text/css&qu