一、plupload的应用(使用详情,请参考链接:http://www.cnblogs.com/2050/p/3913184.html)
(1)首先需要引入2个js,jquery.min.js与plupload.full.min.js,其他细节可以参考官方信息
(2)plupload前端内容html
2 <!--文件上传--> 3 <div class="form-group" style="position:relative;"> 4 <label class="bg-info" id="container">上传文件 5 <button type="button" id="uploadfiles"> 6 <span class="glyphicon-arrow-up"></span> 开始上传 7 </button> 8 <button type="button"id="pickfiles" > 9 <span class="glyphicon-plus"></span> 添加文件 10 </button> 11 </label> 12 <div class="plupload"> 13 <header class="file_box file_header"> 14 <label class="file_delete">操作</label> 15 <label class="file_id">文件ID</label> 16 <label class="file_name">文件名</label> 17 <span class="file_size">大小</span> 18 <b class="file_status">状态</b> 19 </header> 20 21 <ul id="filelist" class="filelist">
Your browser doesn't have Flash, Silverlight or HTML5 support.</ul> 22 </div> 23 </div> 24 <div id="erro" style="height: 10%;overflow: auto;color: red;"></div>
页面显示的效果:
上传后的效果:
(3)js中的内容,主要用于文件的上传
1 var uploader = new plupload.Uploader({// 创建实例的构造方法
2 runtimes : 'html5,flash,silverlight,html4',// 指定上传方式
3 browse_button : 'pickfiles', // 上传按钮
4 // url : '../upload',
5 unique_names : true,// 文件名是否唯一
6 url : '/upload?uid='+uid, //上传到服务器,将文件存入本地磁盘,uid可以传入的参数
7 flash_swf_url : 'plupload/Moxie.swf', //flash与silverlight在本地路径,具体含义参考以上链接
8 silverlight_xap_url : 'plupload/Moxie.xap',
9 filters : { //过滤器
10 max_file_size : '100mb', //文件最大可上传的文件大小
mime_types : [ //只允许上传图片和zip文件
{ title : "Image files", extensions : "jpg,gif,png" },
{ title : "Zip files", extensions : "zip" }
],
11 prevent_duplicates : true, // 不可选取重复的文件
12 },
13 init : {
14 PostInit : function() {
15 document.getElementById('filelist').innerHTML = '';
16 $("#uploadfiles").click (function() {
var isUpload = confirm("是否确定要上传文件?");
if(isUpload){
uploader.start();// 开始上传
return false;
}
});
20 },
21 FilesAdded : function(up, files) {
22 plupload.each(files, function(file) {
23 document.getElementById('filelist').innerHTML += '<li id="'+ file.id + '" class="file_box">'
+ ' <label class="file_delete">'
24 + '<a href="javascript:;">' + '删除' + '</a>'+ '</label>'
+ ' <label class="file_id">' + file.id
25 + '</label>' + ' <label class="file_name">'+ file.name + '</label>'
+ ' <span class="file_size">'
+ plupload.formatSize(file.size)
26 + '</span> <a class="file_status"></a></li>';
27 $.post(pathUrl+file.name,function(data){ //用于判断上传队列中文件在本地数据中是否存在
if (data.code != 0) {
var con = confirm("文件《"+file.name+"》已经存在,或者与本地文件同名,是否确定覆盖原有文件?");
if(!con){ //如果不覆盖,就删除队列中的文件,不对其进行上传
$("#"+file.id).remove();
uploader.removeFile(file);
}
}
});
});
plupload.each(files, function(file) { //主要针对每个文件的删除操作
$("#"+file.id+" .file_delete").click(function() {
if(file.status==2){
alert("文件《"+file.name+"》正在上传,请不要删除!");
}else if(file.status==5){
alert("文件《"+file.name+"》已经上传成功,不可以删除!");
}else{
var gnl = confirm("确定要删除《"+file.name+"》?");
if (gnl == true) {
$("#"+file.id).remove();
uploader.removeFile(file);
} else {
return false;
}
}
});
});
47 },
48 UploadProgress : function(up, file) { //显示文件上传的状态
49 //_mask();
50 var percent = file.percent;
51 $("#" + file.id).find(".file_status").text(file.percent + "%");
52 //_mask();
53 },// 文件上传成功的时候触发,针对于每一个文件;这里主要返回文件上传成功与否的状态,
54 FileUploaded : function(up, file, info) {
55 var data = eval("(" + info.response + ")");// 解析返回的json数据
56 console.log(data);
57 if (data.code == 3) {
58 alert( "文件《"+file.name+"》上传失败!");
61 }
63 },
64 UploadComplete : function(up, files) { //队列中的所有文件上传完后,触发
65 if(files.length<=0){
66 alert("请先添加文件进行,并上传!");
69 }else{
70 var arr2 = new Array();
71 plupload.each(files, function(file) {
72 console.log(file.status);
73 if (file.status == 5) { //将上传成功的文件信息发送到后台进行处理
74 var json = {
75 docId:file.id,
76 docName : file.name,
77 fileSize : plupload.formatSize(file.size)
78 };
79 arr2.push(json);
80 }
81 });
82 console.log(arr2);
83 arr2 = JSON.stringify(arr2);
84 $("#uploadfilelist").val(arr2); //将结果传给前台,以便统一操作
85 alert( "文件上传完成");
88 }
89 },
90 Error : function(up, err,file) { // 上传出错的时候触发
91 if(err.code=="-600"){
alert("文件:"+err.file.name+"太大,超过100mb!");
}else{
alert( err.file.name+"添加上传队列失败!错误原因:"+err.message);
}
95 }
96 }
97 });
98 uploader.init(); //初始化plupload,这句是必须的
(4)后台处理,将文件上传到指定的文件夹下(springMVC的内容,基础知识请参考相关资料)
1 @ResponseBody
2 @RequestMapping(value = "upload", produces = "application/json; charset=utf-8", method = RequestMethod.POST)
3 public JSONObject uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("uid") String uid) {
6 JSONObject jsonObj = new JSONObject();
7 jsonObj.element("code", 0);
8 InputStream input = null;
9 FileOutputStream out = null;
10 String savePath = null, targetPath = null;
11 try {14 if (file != null) { //是否有文件传入
targetPath="E:/aaa"; //根据传入的参数uid,查找文件的相关信息,如文件夹的路径
String fileName = file.getOriginalFilename();
20 savePath = targetPath + '/' + fileName;
21 File realfile = new File(targetPath);// 文件夹目录是否存在
22 if (!realfile.exists()) {
23 realfile.mkdirs();
24 }
25 byte[] bs = file.getBytes();
26 if (bs.length != 0) {
27 if (bs.length > 52428800) { // 最大上传文件50Mb
28 jsonObj.element("code", 1);
29 }
30 input = file.getInputStream();
31 out = new FileOutputStream(savePath);// 创建一个缓冲区,将信息存放到指定目录
32 byte buffer[] = new byte[1024];// 判断输入流中的数据是否已经读完的标识
33 int len = 0;
34 // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath+ "\\"+filename)当中
35 while ((len = input.read(buffer)) > 0) {
36 out.write(buffer, 0, len);
37 }
38 }
40 }
41 } catch (Exception e) {
42 jsonObj.element("code", 2);
44 File file2 = new File(savePath);
45 if (file2.exists()) {
46 file2.delete();
47 }
48 e.printStackTrace();
49 } finally {
50 if(input!=null){
51 try {// 关闭输入流
52 input.close();
53 } catch (IOException e1) {
54 e1.printStackTrace();
55 }
56 }
57 if(out!=null){
58 try { // 关闭输出流
59 out.close();
60 } catch (IOException e) {
61 e.printStackTrace();
62 }
63 }
64 }
65 return jsonObj;
66 }
到此,使用plupload+springMVC的应用,已经完结
但是,plupload的细节地方的理解,可以自行查找网上的资料,这里不做赘述
(
添加(红色字体是才修改的)
:最近才有空完善一下plupload的js,主要有以下几个方面的修改:①上传前先判断,(1)是否上传;(2)同文件名下,是否覆盖上传②上传后,要删除文件的判断(1)只要在上传中或者上传成功后,不可以删除③有些自己写的通用js已经去掉,改为网上公用的js)
有不足之处,希望各位不吝赐教;或者有不懂的地方,都可以提问。
版权声明:本文为weixin_42575593原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。