`
kjkhi
  • 浏览: 184797 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

plupload 上传组件,后台用java实现

阅读更多

Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度、图像自动缩略和上传分块。可同时上传多个文件。

由于可以实现把文件分块上传,所以可以满足在某些限制了上传大小的环境上传大文件的需求。

 

plupload可以运行在多种环境下,如:html5,flash,siverlight,html等。下面是使用siverlight环境的简单配置:

 

var uploader = new plupload.Uploader({
		runtimes : 'silverlight',
		browse_button : 'pickfiles',
		container : 'container',
		max_file_size : '20mb',
		url:"/"+CONTEXT_NAME+"/importFromExcelAction.uploadExcelFile.do",
	    multipart: true,
	    chunk_size : '10mb',//把大文件分割
	    unique_names : true,
	    urlstream_upload : true,
	    multiple_queues : false,
	    filters : [{title : "Excel文件", extensions : "xls,xlsx"}],
	    silverlight_xap_url : '/'+CONTEXT_NAME+'/modules/common/attach/plupload/script/plupload.silverlight.xap'
	});
	uploader.bind("Init",function(up,params){
		$J('#filelist').html("<div>Current runtime: " + params.runtime + "</div>");
	});
	uploader.bind("FilesAdded",function(up,files){
		$J.each(files, function(i, file) {
            $J('#filelist').append(
                '<div id="' + file.id + '">' +
                file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>' +
            '</div>');
        });
        up.refresh();
	});
	
	$J("#uploadfiles").click(function(e){
		uploader.start();
		e.preventDefault();
	})
	
	uploader.bind('UploadProgress', function(up, file) {
        $J('#' + file.id + " b").html(file.percent + "%");
    });
    
    uploader.bind('Error', function(up, err) {
        $J('#filelist').append("<div>Error: " + err.code +
            ", Message: " + err.message +
            (err.file ? ", File: " + err.file.name : "") +
            "</div>"
        );
        up.refresh(); // Reposition Flash/Silverlight
    });

	uploader.bind('FileUploaded', function(up, file) {
        $J('#' + file.id + " b").html("100%");
        $J('#filelist').append("<span>上传成功...</span><br/>");
        $J('#filelist').append("<span>开始处理Excel数据...</span><br/>");
        var request = $J.ajax({
        	url:'/'+CONTEXT_NAME+'/importFromExcelAction.importExcel.do',
        	type:"post",
        	data:{
        			template:$J("#selectTemplate").val(),
        			fileName:file.name
        		}
        });
        
        // 定时获取导入状态
        var task = window.setInterval("getImportStatus()",5000);
        
        request.done(function(data){
        	$J('#filelist').append("<span>success:"+data.success+",msg:"+data.msg+"</span><br/>");
        	window.clearInterval(task);
        });
        request.fail(function(jqXHR, textStatus){
        	$J('#filelist').append("<span>请求处理Excel数据失败:"+textStatus+"</span><br />");
        	window.clearInterval(task);
        });
        
        
    });
    
	uploader.init();

 

而后台,可以使用FileInputStream的构造方法追加文件内容。new FileOutputStream(fullName,isAppend)

plupload使用“multipart/form-data”这种表单上传文件,其中每一个分块会发出一次请求,表单中有两个字段,分别是“chunk”和“chunks”,其中“chunk”是当前正在处理的文件分块的序号(从0开始计数),而“chunks”则是文件的分块总数。具体的实现:

 

/**
	 * <p>使用plupload组件上传文件</p>
	 * @param request
	 * @param response
	 * @param rePath 保存文件的相对路径,以WebRoot为根
	 * @return
	 */
	public static String uploadFiles(HttpServletRequest request,HttpServletResponse response, String rePath){
		String filename = null;
		int chunk = 0;// 当前正在处理的文件分块序号
		int chunks = 0;//分块上传总数
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		// 判断当前表单是否为"multipart/form-data"
		if (isMultipart) {
			ServletFileUpload upload = new ServletFileUpload();
			//webroot绝对路径
			String webRootPath = FileHelper.getServerWebRoot();
			try {
				FileItemIterator iter = upload.getItemIterator(request);
				while (iter.hasNext()) {
				    FileItemStream item = iter.next();
				    String name = item.getFieldName();
				    InputStream input = item.openStream();
				    
				    if("chunk".equals(name)) {
				    	chunk = Integer.valueOf(Streams.asString(input));
				    	continue;
				    }
				    if("chunks".equals(name)) {
				    	chunks = Integer.valueOf(Streams.asString(input));
				    	continue;
				    }

				 // Handle a multi-part MIME encoded file.
				    if (!item.isFormField()) {
				    	// 文件名
				    	filename = item.getName();
				    	// 保存文件目录绝对路径
				    	File dir = new File(webRootPath+rePath);
				    	if(!dir.isDirectory() || !dir.exists()){
				    		dir.mkdir();
				    	}
						
						//保存文件绝对路径
						String fullPath = webRootPath+rePath+"/"+filename;
				    	if(chunk == 0){
					    	File file = new File(fullPath);
					    	if(file.exists()){
					    		file.delete();
					    	}
					    	//上传文件
					    	FileHelper.uploadFile(input, fullPath);
				    	}
				    	if(chunk > 0){
				    		//追加文件
				    		FileHelper.uploadFile(input, fullPath, true);
				    	}
				    	if(chunk+1 == chunks || chunks == 0){
				    		break;
				    	}
				    }
				}
			}
			catch (Exception e) {
				log.error(e, e.fillInStackTrace());
				e.printStackTrace();
			}
		}
		
		return filename;
	}

 

4
0
分享到:
评论
4 楼 wangv 2014-02-20  
不知道上传失败该怎么从plubpload上体现
3 楼 to_tq29 2012-09-12  
顶1楼顶起 
2 楼 to_tq29 2012-09-12  
是的是的,很重要。谢谢
1 楼 hejianmingwshjmcj 2012-09-07  
能不能帖个实例项目,供大家下载

相关推荐

    文件上传并读取plupload与java后台的整合实例

    本实例将详细讲解如何使用plupload前端组件与Java后端(Spring MVC框架)进行整合,实现文件上传及读取的功能。 首先,让我们了解plupload。Plupload是一款强大的、跨浏览器的文件上传组件,支持多文件选择、队列...

    java plupload上传控件小demo

    在这个"java plupload上传控件小demo"中,我们将探讨Plupload的核心特性以及如何在Java环境中实现文件上传功能。 1. **Plupload概述**: Plupload是一个开源的多浏览器文件上传组件,支持HTML5、Flash、...

    plupload+jquery+java多文件上传下载功能

    标题中的“plupload+jquery+java多文件上传下载功能”是指使用plupload插件结合jQuery和Java技术,实现一个能够支持多文件上传和下载(包括单个文件直接下载及多个文件打包下载)的功能。这个功能通常应用于需要大量...

    plupload java断点续传

    Plupload是一款强大的、跨浏览器的上传组件,支持多种特性,其中最引人注目的就是它的断点续传功能。在IT行业中,断点续传是一项非常实用的技术,尤其是在处理大文件上传时,如标题中提到的能处理超过4GB的大文件。...

    plupload断点续传

    开发者可以通过`GboatFileUploadInterceptor.java`这样的后台逻辑来配合前端的Plupload,确保整个上传流程的顺利进行。这种技术在大数据传输和云存储服务中被广泛应用,提高了用户体验并减少了网络拥堵。

    Plupload多文件上传(调整后)

    Plupload是一款强大的、跨平台的文件上传组件,它支持多种浏览器和文件上传方式,包括HTML5、Flash、Silverlight和HTML4。这个“Plupload多文件上传(调整后)”项目显然是针对Struts2框架进行优化,解决了在上传大于2...

    plupload190612.rar

    这个名为 "plupload190612.rar" 的压缩包文件包含了一个使用Plupload插件的示例项目,该项目的后台处理部分是用Java语言编写的,而前端则是结合了jQuery和EasyUI这两个流行的JavaScript库来实现用户界面和交互。...

    springboot+gradle+plupload

    Plupload是一个开源的多浏览器文件上传组件,支持断点续传和大文件分块上传。它解决了传统表单上传方式的限制,如文件大小限制和一次性只能上传一个文件的问题。Plupload提供了一种高效且用户友好的文件上传体验,...

    java web 大文件上传源代码,找了好久改了下,分享给大家

    以下将详细介绍Java Web中实现大文件上传的关键知识点。 1. **前端上传组件**: - `plupload` 是一个跨浏览器的文件上传插件,支持多线程上传,能够很好地处理大文件上传。在`pluploadTest`中,可能包含了使用...

    swfUpload 上传例子

    在Java环境下使用SwfUpload,你需要创建一个后台接收上传文件的服务。通常,这个服务会处理文件的接收、验证、存储等操作。SwfUpload 会通过HTTP POST请求将文件发送到指定的URL,Java服务需要解析这些请求,获取...

    仿163网盘无刷新多文件上传系统四语言

    PHP可以通过使用jQuery库如`plupload`或`dropzone.js`等插件来实现无刷新多文件上传。服务器端脚本会接收并处理这些文件,包括验证、存储和可能的转换。 3. **.NET**:.NET框架是微软提供的一个全面的开发平台,...

    swfupload 文件上传

    SwfUpload 是一款开源的Flash上传组件,它允许在网页中实现多文件、大文件的异步上传功能。由于HTML5之前的技术限制,JavaScript无法直接处理大文件的上传,因此SwfUpload通过嵌入Flash插件的方式,克服了这一难题。...

    一个MP3上传下载的案例,,,也是一个挺不错的例子哦

    这个"MP3上传下载的案例"为Java学习者提供了一个实用的实践项目,它涉及到的技术点主要包括:HTTP协议、文件I/O操作、多线程以及用户界面(UI)组件的使用。 1. **HTTP协议**:在上传和下载过程中,通常会使用HTTP...

    支持断点续传的下载进度对话框

    它可以是原生安卓的`ProgressDialog`、自定义布局,或者使用第三方库如`SweetAlert`、`MaterialDialog`等实现,确保用户体验友好且直观。 5. **错误处理和重试机制**:为了应对可能的网络中断,需要设置合理的重试...

    树形控件和jquery上传附件

    常见的jQuery文件上传插件有jQuery File Upload、Plupload等。这些插件支持多文件选择、进度条显示、预览、取消上传等功能,大大提升了用户体验。在实际应用中,我们需要创建一个HTML表单,添加input元素类型为file...

    分享20多个很棒的jQuery 文件上传插件或教程

    FancyUpload是一个基于Flash和Ajax的组件,使用MooTools库,提供了上传进度条和多文件上传功能。 这些jQuery文件上传插件和教程覆盖了从基本到高级的各种需求,无论你是新手还是经验丰富的开发者,都能找到适合自己...

Global site tag (gtag.js) - Google Analytics