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; }
相关推荐
本实例将详细讲解如何使用plupload前端组件与Java后端(Spring MVC框架)进行整合,实现文件上传及读取的功能。 首先,让我们了解plupload。Plupload是一款强大的、跨浏览器的文件上传组件,支持多文件选择、队列...
在这个"java plupload上传控件小demo"中,我们将探讨Plupload的核心特性以及如何在Java环境中实现文件上传功能。 1. **Plupload概述**: Plupload是一个开源的多浏览器文件上传组件,支持HTML5、Flash、...
标题中的“plupload+jquery+java多文件上传下载功能”是指使用plupload插件结合jQuery和Java技术,实现一个能够支持多文件上传和下载(包括单个文件直接下载及多个文件打包下载)的功能。这个功能通常应用于需要大量...
Plupload是一款强大的、跨浏览器的上传组件,支持多种特性,其中最引人注目的就是它的断点续传功能。在IT行业中,断点续传是一项非常实用的技术,尤其是在处理大文件上传时,如标题中提到的能处理超过4GB的大文件。...
开发者可以通过`GboatFileUploadInterceptor.java`这样的后台逻辑来配合前端的Plupload,确保整个上传流程的顺利进行。这种技术在大数据传输和云存储服务中被广泛应用,提高了用户体验并减少了网络拥堵。
Plupload是一款强大的、跨平台的文件上传组件,它支持多种浏览器和文件上传方式,包括HTML5、Flash、Silverlight和HTML4。这个“Plupload多文件上传(调整后)”项目显然是针对Struts2框架进行优化,解决了在上传大于2...
这个名为 "plupload190612.rar" 的压缩包文件包含了一个使用Plupload插件的示例项目,该项目的后台处理部分是用Java语言编写的,而前端则是结合了jQuery和EasyUI这两个流行的JavaScript库来实现用户界面和交互。...
Plupload是一个开源的多浏览器文件上传组件,支持断点续传和大文件分块上传。它解决了传统表单上传方式的限制,如文件大小限制和一次性只能上传一个文件的问题。Plupload提供了一种高效且用户友好的文件上传体验,...
以下将详细介绍Java Web中实现大文件上传的关键知识点。 1. **前端上传组件**: - `plupload` 是一个跨浏览器的文件上传插件,支持多线程上传,能够很好地处理大文件上传。在`pluploadTest`中,可能包含了使用...
在Java环境下使用SwfUpload,你需要创建一个后台接收上传文件的服务。通常,这个服务会处理文件的接收、验证、存储等操作。SwfUpload 会通过HTTP POST请求将文件发送到指定的URL,Java服务需要解析这些请求,获取...
PHP可以通过使用jQuery库如`plupload`或`dropzone.js`等插件来实现无刷新多文件上传。服务器端脚本会接收并处理这些文件,包括验证、存储和可能的转换。 3. **.NET**:.NET框架是微软提供的一个全面的开发平台,...
SwfUpload 是一款开源的Flash上传组件,它允许在网页中实现多文件、大文件的异步上传功能。由于HTML5之前的技术限制,JavaScript无法直接处理大文件的上传,因此SwfUpload通过嵌入Flash插件的方式,克服了这一难题。...
这个"MP3上传下载的案例"为Java学习者提供了一个实用的实践项目,它涉及到的技术点主要包括:HTTP协议、文件I/O操作、多线程以及用户界面(UI)组件的使用。 1. **HTTP协议**:在上传和下载过程中,通常会使用HTTP...
它可以是原生安卓的`ProgressDialog`、自定义布局,或者使用第三方库如`SweetAlert`、`MaterialDialog`等实现,确保用户体验友好且直观。 5. **错误处理和重试机制**:为了应对可能的网络中断,需要设置合理的重试...
常见的jQuery文件上传插件有jQuery File Upload、Plupload等。这些插件支持多文件选择、进度条显示、预览、取消上传等功能,大大提升了用户体验。在实际应用中,我们需要创建一个HTML表单,添加input元素类型为file...
FancyUpload是一个基于Flash和Ajax的组件,使用MooTools库,提供了上传进度条和多文件上传功能。 这些jQuery文件上传插件和教程覆盖了从基本到高级的各种需求,无论你是新手还是经验丰富的开发者,都能找到适合自己...