Uploadify v3.2.1

这几天做一个web项目的上传功能折腾了好几天,发现了一个相当的好用的web上传插件,赶紧记下来,以后用的时候方便。

官方下载地址:http://www.uploadify.com/download/

官方文档:http://www.uploadify.com/documentation/

七郎的参数说明的博客,讲的很全(侵删):http://www.cnblogs.com/yangy608/p/3915349.html

一、简单使用方法:

1.新建uploadify文件夹放入需要的插件(因为uploadify是依赖于jquery的,所以我直接也把jquery放进去了,下载的插件包是没有jquery的)

目录结构

 102901_IzLT_2897732.png                                                                                                                                                                                                                       102840_pHfD_2897732.png

 

2.新建html页面,并引入相应的包(红色框中的部分)

212040_21iE_2897732.png

<link rel="stylesheet" type="text/css" href="../uploadify/uploadify.css"/>
<script src="../uploadify/jquery-3.0.0.min.js" type="text/javascript" charset="utf-8"></script>
<script src="../uploadify/jquery.uploadify.min.js" type="text/javascript" charset="utf-8"></script>

写入必要的HTML文本

<input type="file" name="uploadify" id="uploadInput" />
<div id="accessory"></div>

 

3.在js中引用uploadify插件

常规的uploadify插件设置

$("#uploadInput").uploadify({                      //上传附件
			'swf': '../../testUploadify/uploadify/uploadify.swf',    //加载swf文件
			'uploader':  '/nutzbook/testUploadify/uploadifyCommon',    //处理此文件的后台文件
			'cancelImg': '../../testUploadify/uploadify/uploadify-cancel.png',  //插件上的小叉叉的图片
			'queueID': 'accessory',                               //存放上传文件的div的Id
			'filleSizeLimit':'20MB',                              //上传的最大文件的大小
			'auto': true,                //设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 
			'multi': true,               //设置为true时可以上传多个文件。
			'buttonText':'上传附件',                               //上传按钮的名称
			'removeCompleted':false,     //是否自动将已完成任务从队列中删除,设置为false则会一直保留此任务显示
			'onUploadStart':function(file){
		    //上传开始的时候执行的,返回false就不往下执行
			},
			'onSWFReady': function() {
	        //flash文件载入成功后触发,也可以理解为uploadify插件加载成功后执行
			},
			'onUploadSuccess': function(file, data) {
			 //文件上传成功后执行
			}
	  });

这样就简单的实现了文件的上传功能

4.完整的代码块

前端

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="../uploadify/uploadify.css" />
		<script src="../uploadify/jquery-2.1.3.js" type="text/javascript" charset="utf-8"></script>
		<script src="../uploadify/jquery.uploadify.min.js" type="text/javascript" charset="utf-8"></script>
	</head>

	<body>
		<input type="file" name="uploadify" id="uploadInput" />
		<div id="accessory"></div>
		<script type="text/javascript">
		$("#uploadInput").uploadify({                      //上传附件
			'swf': '../../testUploadify/uploadify/uploadify.swf',    //加载swf文件
			'uploader':  '/nutzbook/testUploadify/uploadifyCommon',    //处理此文件的后台文件
			'cancelImg': '../../testUploadify/uploadify/uploadify-cancel.png',  //插件上的小叉叉的图片
			'queueID': 'accessory',                               //存放上传文件的div的Id
			'filleSizeLimit':'20MB',                              //上传的最大文件的大小
			'auto': true,                //设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 
			'multi': true,               //设置为true时可以上传多个文件。
			'buttonText':'上传附件',                               //上传按钮的名称
			'removeCompleted':false,     //是否自动将已完成任务从队列中删除,设置为false则会一直保留此任务显示
			'onUploadStart':function(file){
		    //上传开始的时候执行的,返回false就不往下执行
			},
			'onSWFReady': function() {
	        //flash文件载入成功后触发,也可以理解为uploadify插件加载成功后执行
			},
			'onUploadSuccess': function(file, data) {
			 //文件上传成功后执行
			}
	  });
		</script>
	</body>
	</html>

后端

package net.zb.nutzbook.control;

import java.io.ByteArrayOutputStream;
import java.io.File;

import javax.imageio.stream.FileImageInputStream;

import org.nutz.mvc.annotation.AdaptBy;
import org.nutz.mvc.annotation.At;
import org.nutz.mvc.annotation.Ok;
import org.nutz.mvc.annotation.Param;
import org.nutz.mvc.upload.TempFile;
import org.nutz.mvc.upload.UploadAdaptor;

@At("/testUploadify")
public class UploadifyAction {
       /**
        * 跳转至文件测试页面 
        * @return
        */
	@At("/loadUploadHtml")
	@Ok("redirect:/testUploadify/html/myupload_zb.html")
	public String loadUploadHtml() {
		return "success";
	}
	
	/**
	 * 处理上传文件
	 * @param file
	 * @return
	 */
	@At("/uploadifyCommon")
	@AdaptBy(type = UploadAdaptor.class, args = { "/uploadTemp", "8192",
			"UTF-8", "10" })
	@Ok("json")
	public String uploadifyCommon(@Param("Filedata") TempFile file) {
		if (file != null) {
			File fl = file.getFile();
			FileImageInputStream pic = null;
			ByteArrayOutputStream bos = null;
			try {
				pic = new FileImageInputStream(fl);
				byte[] buffer = null;
				bos = new ByteArrayOutputStream();
				byte[] b = new byte[1024];
				int n = 0;
				while ((n = pic.read(b)) != -1) {
					bos.write(b, 0, n);
				}
				buffer = bos.toByteArray();
				//把buffer插入数据库就可以了
			} catch (Exception e) {
				System.out.println("上传文件出错!"+e);
			}
		}
		return "success";   //返回此附件的数据库Id
	}
}

上传成功效果图

105623_J1Gr_2897732.png

二、扩展

1.增加小叉叉的删除功能

(1)新建集合变量保存附件

var fileList = [];      //保存附件的集合

(2)附件上传成功的时候把附件保存进集合

	'onUploadSuccess': function(file, data) {
				var file = {
					"fileId": file.id,
					"fid": data
				};
				fileList.push(file);
				cancelAtt();
			}

(3)增加小叉叉的点击方法

/**
 * 点击附件后面的小叉叉删除附件的方法
 */
		var cancelAtt = function() { //点击附件的那个小叉叉
			$("#accessory .cancel").off("click");  //取消原本的单击事件
			$("#accessory .cancel").on("click",function() {
						var fileId = $(this).parent(".uploadify-queue-item").attr("id"); // 文件的html中的Id
						var fileInfo = null; // 文件后端返回的Id(数据库的文件Id)
						for (var i = 0; i < fileList.length; i++) {
							if (fileList[i].fileId = fileId) { // 如果文件集合中有当前的文件
								fileInfo = fileList[i].fid; // 把文件的数据库Id获取到
								fileList.splice(i,1); // 把集合中的文件删除
								break;
							}
						}
						if (fileInfo != null) { // 如果文件的数据库Id存在
							$.ajax({
									type: "post",
									url: "testUploadify/deleteAtt",    //删除数据库中此id的附件
									async: true,
									data: {
										attId: ~fileInfo.indexOf('"') ? fileInfo.substring(1, fileInfo.length - 1) : fileInfo
									},
									success: function(data) {}
								});
						}
					});
		}

(4)完整的前端代码

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="../uploadify/uploadify.css" />
<script src="../uploadify/jquery-2.1.3.js" type="text/javascript"
	charset="utf-8"></script>
<script src="../uploadify/jquery.uploadify.min.js"
	type="text/javascript" charset="utf-8"></script>
</head>

<body>
	<input type="file" name="uploadify" id="uploadInput" />
	<div id="accessory"></div>
	<script type="text/javascript">
		var fileList = [];      //保存附件的集合
		$("#uploadInput").uploadify({                      //上传附件
			'swf': '../../testUploadify/uploadify/uploadify.swf',    //加载swf文件
			'uploader':  '/nutzbook/testUploadify/uploadifyCommon',    //处理此文件的后台文件
			'cancelImg': '../../testUploadify/uploadify/uploadify-cancel.png',  //插件上的小叉叉的图片
			'queueID': 'accessory',                               //存放上传文件的div的Id
			'filleSizeLimit':'20MB',                              //上传的最大文件的大小
			'auto': true,                //设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 
			'multi': true,               //设置为true时可以上传多个文件。
			'buttonText':'上传附件',                               //上传按钮的名称
			'removeCompleted':false,     //是否自动将已完成任务从队列中删除,设置为false则会一直保留此任务显示
			'onUploadStart':function(file){
		    //上传开始的时候执行的,返回false就不往下执行
			},
			'onSWFReady': function() {
	        //flash文件载入成功后触发,也可以理解为uploadify插件加载成功后执行
			},
			'onUploadSuccess': function(file, data) {
				var file = {
					"fileId": file.id,
					"fid": data
				};
				fileList.push(file);
				cancelAtt();
			}
	  });
		
		/**
		 * 点击附件后面的小叉叉删除附件的方法
		 */
		var cancelAtt = function() { //点击附件的那个小叉叉
			$("#accessory .cancel").off("click");  //取消原本的单击事件
			$("#accessory .cancel").on("click",function() {
						var fileId = $(this).parent(".uploadify-queue-item").attr("id"); // 文件的html中的Id
						var fileInfo = null; // 文件后端返回的Id(数据库的文件Id)
						for (var i = 0; i < fileList.length; i++) {
							if (fileList[i].fileId = fileId) { // 如果文件集合中有当前的文件
								fileInfo = fileList[i].fid; // 把文件的数据库Id获取到
								fileList.splice(i,1); // 把集合中的文件删除
								break;
							}
						}
						if (fileInfo != null) { // 如果文件的数据库Id存在
							$.ajax({
									type: "post",
									url: "testUploadify/deleteAtt",    //删除数据库中此id的附件
									async: true,
									data: {
										attId: ~fileInfo.indexOf('"') ? fileInfo.substring(1, fileInfo.length - 1) : fileInfo
									},
									success: function(data) {}
								});
						}
					});
		}
		</script>
</body>
</html>

2.草稿文件加载附件块

(1)设置加载uploadify插件为回调函数

 loadAttachment(function() {
 //原插件引用方法
 });

(2)查询数据库的此附件,然后加载

/**
 * 如果是草稿文件,查詢有附件就加載附件
 */
var loadAttachment = function(callback) { 
	$.ajax({
		type: "post",
		url: "testUploadify/loadAttachment",    //查询附件
		async: true,
		data: {
			fileId: **  //附件Id,传参
		},
		success: function(data) {
			var da = $.parseJSON(data);
			var html = "";
			if (da) {
				$.each(da, function(index, d) {
					html += "<div id=\"" + d.attachmentId + "\" class=\"uploadify-queue-item\">";
					html += "<div class=\"cancel\">";
					html += "<a href=\"javascript:$(\'#uploadFiles\').uploadify(\'cancel\', \'" + d.attachmentId + "\')\">X</a>";
					html += "</div> ";
					html += "<span class=\"fileName\">" + d.attachmentName + "</span>";
					html += "<span class=\"data\"> - Complete</span>";
					html += "<div class=\"uploadify-progress\">";
					html += "<div class=\"uploadify-progress-bar\" style=\"width: 100%;\">";
					html += "</div>";
					html += "</div>";
					html += "</div>";
					var file = {
						"fileId": d.attachmentId,
						"fid": d.attachmentId
					};
					fileList.push(file);

				});
			}
			$("#accessory").html(html);
			cancelAtt();       //使附件后的叉叉生效
			callback();        //执行加载附件的回调
		}
	});
}

(3)前端完整代码

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="../uploadify/uploadify.css" />
<script src="../uploadify/jquery-2.1.3.js" type="text/javascript"
	charset="utf-8"></script>
<script src="../uploadify/jquery.uploadify.min.js"
	type="text/javascript" charset="utf-8"></script>
</head>

<body>
	<input type="file" name="uploadify" id="uploadInput" />
	<div id="accessory"></div>
	<script type="text/javascript">
		var fileList = [];      //保存附件的集合
		  loadAttachment(function() {
		$("#uploadInput").uploadify({                      //上传附件
			'swf': '../../testUploadify/uploadify/uploadify.swf',    //加载swf文件
			'uploader':  '/nutzbook/testUploadify/uploadifyCommon',    //处理此文件的后台文件
			'cancelImg': '../../testUploadify/uploadify/uploadify-cancel.png',  //插件上的小叉叉的图片
			'queueID': 'accessory',                               //存放上传文件的div的Id
			'filleSizeLimit':'20MB',                              //上传的最大文件的大小
			'auto': true,                //设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传 
			'multi': true,               //设置为true时可以上传多个文件。
			'buttonText':'上传附件',                               //上传按钮的名称
			'removeCompleted':false,     //是否自动将已完成任务从队列中删除,设置为false则会一直保留此任务显示
			'onUploadStart':function(file){
		    //上传开始的时候执行的,返回false就不往下执行
			},
			'onSWFReady': function() {
	        //flash文件载入成功后触发,也可以理解为uploadify插件加载成功后执行
			},
			'onUploadSuccess': function(file, data) {
				var file = {
					"fileId": file.id,
					"fid": data
				};
				fileList.push(file);
				cancelAtt();
			}
	   });
	  });
		
		/**
		 * 点击附件后面的小叉叉删除附件的方法
		 */
		var cancelAtt = function() { //点击附件的那个小叉叉
			$("#accessory .cancel").off("click");  //取消原本的单击事件
			$("#accessory .cancel").on("click",function() {
						var fileId = $(this).parent(".uploadify-queue-item").attr("id"); // 文件的html中的Id
						var fileInfo = null; // 文件后端返回的Id(数据库的文件Id)
						for (var i = 0; i < fileList.length; i++) {
							if (fileList[i].fileId = fileId) { // 如果文件集合中有当前的文件
								fileInfo = fileList[i].fid; // 把文件的数据库Id获取到
								fileList.splice(i,1); // 把集合中的文件删除
								break;
							}
						}
						if (fileInfo != null) { // 如果文件的数据库Id存在
							$.ajax({
									type: "post",
									url: "testUploadify/deleteAtt",    //删除数据库中此id的附件
									async: true,
									data: {
										attId: ~fileInfo.indexOf('"') ? fileInfo.substring(1, fileInfo.length - 1) : fileInfo
									},
									success: function(data) {}
								});
						}
					});
		}
		
		/**
		 * 如果是草稿文件,查詢有附件就加載附件
		 */
		var loadAttachment = function(callback) { 
			$.ajax({
				type: "post",
				url: "testUploadify/loadAttachment",    //查询附件
				async: true,
				data: {
					fileId: **  //附件Id,传参
				},
				success: function(data) {
					var da = $.parseJSON(data);
					var html = "";
					if (da) {
						$.each(da, function(index, d) {
							html += "<div id=\"" + d.attachmentId + "\" class=\"uploadify-queue-item\">";
							html += "<div class=\"cancel\">";
							html += "<a href=\"javascript:$(\'#uploadFiles\').uploadify(\'cancel\', \'" + d.attachmentId + "\')\">X</a>";
							html += "</div> ";
							html += "<span class=\"fileName\">" + d.attachmentName + "</span>";
							html += "<span class=\"data\"> - Complete</span>";
							html += "<div class=\"uploadify-progress\">";
							html += "<div class=\"uploadify-progress-bar\" style=\"width: 100%;\">";
							html += "</div>";
							html += "</div>";
							html += "</div>";
							var file = {
								"fileId": d.attachmentId,
								"fid": d.attachmentId
							};
							fileList.push(file);

						});
					}
					$("#accessory").html(html);
					cancelAtt();       //使附件后的叉叉生效
					callback();        //执行加载附件的回调
				}
			});
		}
		</script>
</body>
</html>

 

转载于:https://my.oschina.net/ThreeTiger/blog/1547733

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值