jeesite集成plupload上传组件

下面是具体实现和调用的步骤和代码:

1:引入plupload的js和其他的文件,具体可以在网上下载。包括moxie.js moxie.min.js Moxie.swf Moxie.xap plupload.dev.js plupload.full.min.js plupload.min.js,如下图:


2:在jeesite的head.jsp里面引入

<script type="text/javascript" src="${pageContext.request.contextPath}/static/plupload/plupload.full.min.js"></script>

3:开发myupload.tag标签组件,并放到WEB-INFO/tags/sys下面 


myupload.tag的实现代码如下:


<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<%@ attribute name="input" type="java.lang.String" required="true" description="输入框"%>
<%@ attribute name="type" type="java.lang.String" required="true" description="files、images、flash、thumb"%>
<%@ attribute name="uploadPath" type="java.lang.String" required="true" description="文件的上传路径"%>
<%@ attribute name="uploadMaxSize" type="java.lang.String" required="false" description="扩展属性,允许上传的单个文件的最大值,单位是M,0表示没有限制"%>
<%@ attribute name="uploadMimeTypes" type="java.lang.String" required="false" description="扩展属性,允许上传的文件类型,比如zip,jpg以逗号分割多个,空表示没有限制"%>
<%@ attribute name="saveRealName" type="java.lang.String" required="false" description="扩展属性,保存名称是否是文件原名 true:保存原名 false:系统随机重命名"%>

<ol id="${input}Preview"></ol>
<c:if test="${!readonly}">
<a id="${input}sc" class="btn">添加</a>
 <a href="javascript:" οnclick="${input}DelAll();" class="btn">清除</a> 
</c:if>
<%-- <input type="button" value="开始上传" id="${input}upload-btn" /> --%>
<script type="text/javascript">
$(document).ready(function() 
{
	var files${input} = [];
	var errors${input} = [];
		var uploader${input} = new plupload.Uploader({ //实例化一个plupload上传对象
			   browse_button : "${input}sc",
			   runtimes : 'html5,html,flash,silverlight',//设置运行环境,会按设置的顺序,可以选择的值有html5,gears,flash,silverlight,browserplus,html
			   flash_swf_url : '${pageContext.request.contextPath}/static/plupload/Moxie.swf',
			   silverlight_xap_url : '${pageContext.request.contextPath}/static/plupload/Moxie.xap',
		       url : '${pageContext.request.contextPath}/uploadFile.do?type=${type}&uploadPath=${uploadPath}',//上传文件路径
	           max_file_size : '10gb',//100b, 10kb, 10mb, 1gb
	           chunk_size : '100mb',//分块大小,小于这个大小的不分块
	           unique_names : true,//生成唯一文件名
	           init:{
	       		//绑定文件添加进队列事件
	       		FilesAdded:function(uploader${input},files${input})
	       		{
	       			for(var i = 0, len = files${input}.length; i<len; i++){
	       				var file_name = files${input}[i].name; //文件名
	       				var uploadMaxSizes=files${input}[i].size/(1024*1024);
	       				var tmeidatype="${uploadMimeTypes}";
	       		if(tmeidatype!=""){
	       		if(tmeidatype.indexOf(file_name.substring(file_name.lastIndexOf('.') + 1))>-1)
	       		{
	       		}else
	       			{
	       			uploader${input}.removeFile(files${input}[i]);
	       			alert("上传文件类型不合法,只允许上传"+tmeidatype);
	       			return ;
	       			}
	       		}
	       		var tsize=${uploadMaxSize}+"";
	       		if(tsize!=""&&tsize>0){
	       		if(uploadMaxSizes>tsize)
	       			{
	       			uploader${input}.removeFile(files${input}[i]);
	       			alert("上传文件大小超过限制"+tsize+"M");
	       			return ;
	       			}
	       		}
	       			//构造html来更新UI
	       			var html = '<li id="file-' + files${input}[i].id +'"><p class="file-name">' + file_name + '</p><p class="progress"></p><div id="progress'+ files${input}[i].id+'"></div></li>';
	       			$(html).appendTo('#file-list${input}');
	       			}
	       			uploader${input}.start(); //开始上传
	       		},
	       		BeforeUpload:function(uploader${input},file)
	       		{
	       		 var tsaveName="${saveRealName}";
	       		if(tsaveName=="true"){
	       		var tsaveRealName= encodeURI(file.name);
	       		tsaveRealName=encodeURI(tsaveRealName);
	       		uploader${input}.settings.url =  (uploader${input}.settings.url).split("&savename")[0]+'&savename='+tsaveRealName; 
	       		}
	       		},
	       		UploadProgress:function(uploader${input},file)
	       		{
	       			if(file.percent!=100){
	       			$('#file-'+file.id+' .progress').css('width',file.percent + '%');//控制进度条
	       			$("#progress"+file.id).html("上传进度为:" + file.percent + "%"+" ");
	       			}else
	       			{
	       			$("#progress"+file.id).html("文件已经分块上传成功,后台合并中请稍后...");	
	       			}
	       		},
	       		FileUploaded:function(up,file,info)
	       		{
	       		  var response = $.parseJSON(info.response);
		       	     if (response.status) {
		       	         $("#${input}").val($("#${input}").val()+($("#${input}").val(response.fileUrl)==""?response.fileUrl:"|"+response.fileUrl));
		       	      $("#progress"+file.id).html("");
		       	      $("#file-list${input}").html("");
		       	      ${input}Preview();
		       	     }else
		       	    {
		       	    	 $("#file-list${input}").html("<font color='red'>"+file.name+"上传失败,请联系系统管理员。</font>");	 
		       	    }
	       		}
	       	}
	         
		});
	
		  uploader${input}.init();
		
//上传按钮
// $('#${input}upload-btn').click(function(){
// 	uploader${input}.start(); //开始上传
// });
	
}); 
function ${input}Del(obj){
	var url = $(obj).prev().attr("url");
	$("#${input}").val($("#${input}").val().replace("|"+url,"","").replace(url+"|","","").replace(url,"",""));
	${input}Preview();
}
function ${input}DelAll(){
	$("#${input}").val("");
	 $("#file-list${input}").html("");
	${input}Preview();
}
function ${input}Preview(){
	var li, urls = $("#${input}").val().split("|");
	$("#${input}Preview").children().remove();
	for (var i=0; i<urls.length; i++){
		if (urls[i]!=""){//<c:if test="${type eq 'thumb' || type eq 'images'}">
			li = "<li><img src=\""+urls[i]+"\" url=\""+urls[i]+"\" style=\"max-width:${empty maxWidth ? 200 : maxWidth}px;max-height:${empty maxHeight ? 200 : maxHeight}px;_height:${empty maxHeight ? 200 : maxHeight}px;border:0;padding:3px;\">";//</c:if><c:if test="${type ne 'thumb' && type ne 'images'}">
			li = "<li><a href=\""+urls[i]+"\" url=\""+urls[i]+"\" target=\"_blank\">"+decodeURIComponent(urls[i].substring(urls[i].lastIndexOf("/")+1))+"</a>";//</c:if>
			li += "  <c:if test="${!readonly}"><a href=\"javascript:\" οnclick=\"${input}Del(this);\">×</a></c:if></li>";
			$("#${input}Preview").append(li);
		}
	}
	if ($("#${input}Preview").text() == ""){
		$("#${input}Preview").html("<li style='list-style:none;padding-top:5px;'>无</li>");
	}
}

</script>
	<div class="wraper">
		<ul id="file-list${input}">
		</ul>
	</div>

 

4:开发后台上传controller代码

</pre><pre>
package cn.huazx.ebp.common.web;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.alibaba.fastjson.JSON;

import cn.huazx.ebp.modules.sys.utils.UserUtils;

@Controller
public class UploadController {

	private String savePath;// 数据库存储路径
	private String uploadPath;// 附件的实际存储的绝对路径
	@RequestMapping(value = "uploadFile.do", method = RequestMethod.POST)
	public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
    	
		Calendar date = Calendar.getInstance();
		response.setCharacterEncoding("UTF-8");
		Integer chunk = null; /* 分割块数 */
		Integer chunks = null; /* 总分割数 */
		String tempFileName = null; /* 临时文件名 */
		String newFileName = null; /* 最后合并后的新文件名 */
		BufferedOutputStream outputStream = null;
		/* System.out.println(FileUtils.getTempDirectoryPath()); */
		/**
		 * 还是加个null工具类判断把 fuck
		 */
		String savename=UserUtils.checkNull(request.getParameter("savename"));//保存名称
		if(!savename.equals("")){
		savename=URLDecoder.decode( request.getParameter("savename"), "utf-8");
		System.out.println("保存文件原名"+savename);
		}
		else
		{
			System.out.println("系统随机重命名");

		}
		
		uploadPath = request.getSession().getServletContext()
				.getRealPath("uploadPath" + File.separator + UserUtils.getUser().getLoginName() + File.separator
						+ request.getParameter("type") + request.getParameter("uploadPath") + File.separator
						+ date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH) + 1) + File.separator
						+ date.get(Calendar.DAY_OF_MONTH));
		savePath = "uploadPath" + File.separator + UserUtils.getUser().getLoginName() + File.separator
				+ request.getParameter("type") + request.getParameter("uploadPath") + File.separator
				+ date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH) + 1) + File.separator
				+ date.get(Calendar.DAY_OF_MONTH);
		savePath = savePath.replaceAll("\\\\", "/");
		File up = new File(uploadPath);
		if (!up.exists()) {
			up.mkdirs();
		}

		if (ServletFileUpload.isMultipartContent(request)) {
			try {
				DiskFileItemFactory factory = new DiskFileItemFactory();
				factory.setSizeThreshold(1024);
				/* factory.setRepository(new File(repositoryPath));// 设置临时目录 */
				ServletFileUpload upload = new ServletFileUpload(factory);
				upload.setHeaderEncoding("UTF-8");
				List<FileItem> items = upload.parseRequest(request);
				for (FileItem item : items) {
					if (item.isFormField()) /* 是文本域 */
					{
						if (item.getFieldName().equals("name")) {
							tempFileName = item.getString();
							/* System.out.println("临时文件名:" + tempFileName); */
						} else if (item.getFieldName().equals("chunk")) {
							chunk = Integer.parseInt(item.getString());
							/* System.out.println("当前文件块:" + (chunk + 1)); */
						} else if (item.getFieldName().equals("chunks")) {
							chunks = Integer.parseInt(item.getString());
							/* System.out.println("文件总分块:" + chunks); */
						}
					} else { /* 如果是文件类型 */
						if (tempFileName != null) {
							String chunkName = tempFileName;
							if (chunk != null) {
								chunkName = chunk + "_" + tempFileName;
							}
							File savedFile = new File(uploadPath, chunkName);
							item.write(savedFile);
						}
					}
				}
				if(!savename.equals("")){
				newFileName =savename;
				}else{
				newFileName = UUID.randomUUID().toString().replace("-", "").concat(".").concat(FilenameUtils.getExtension(tempFileName));
				}
				if (chunk != null && chunk + 1 == chunks) {
					outputStream = new BufferedOutputStream(new FileOutputStream(new File(uploadPath, newFileName)));
					/* 遍历文件合并 */
					for (int i = 0; i < chunks; i++) {
						File tempFile = new File(uploadPath, i + "_" + tempFileName);
						byte[] bytes = FileUtils.readFileToByteArray(tempFile);
						outputStream.write(bytes);
						outputStream.flush();
						tempFile.delete();
					}
					outputStream.flush();
				}
				Map<String, Object> m = new HashMap<String, Object>();
				m.put("status", true);
				// savePath
				// m.put( "fileUrl",uploadPath+ "\\"
				// + newFileName );
				m.put("fileUrl", savePath + "/" + newFileName);
				System.out.println(savePath);
				response.getWriter().write(JSON.toJSONString(m));
			} catch (FileUploadException e) {
				e.printStackTrace();
				Map<String, Object> m = new HashMap<String, Object>();
				m.put("status", false);
				response.getWriter().write(JSON.toJSONString(m));
			} catch (Exception e) {
				e.printStackTrace();
				Map<String, Object> m = new HashMap<String, Object>();
				m.put("status", false);
				response.getWriter().write(JSON.toJSONString(m));
			} finally {
				try {
					if (outputStream != null)
						outputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}


最后写个测试的jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
<html>
<head>
	<title>测试附件</title>
	<meta name="decorator" content="default"/>
		<%@include file="/WEB-INF/views/include/head.jsp" %>		
	
</head>
<body>
<div class="control-group">
		<div class="control-group" style="width: 200px;">
			<label class="control-label">文件附件测试:</label>
			<div class="controls">
                <input type="hidden" id="files" name="files" value="" />
				<sys:myupload input="files" type="files" uploadPath="/cms/article" uploadMaxSize="0" uploadMimeTypes="exe,zip,iso,doc" saveRealName="true"/>
			</div>
		</div>
		
		<div class="control-group">
			<label class="control-label">附件图片测试:</label>
			<div class="controls">
                <input type="hidden" id="filesee" name="filesee" value="" />
				<sys:myupload input="filesee" type="images" uploadPath="/cms/article" uploadMaxSize="10" uploadMimeTypes="jpg"/>
			</div>
		</div>
	</div>
</body>
</html>

测试效果图:




 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
plupload是一个基于HTML5和Flash技术的开源文件上传组件,它不仅可以用于上传文件,还可以用于下载文件。 使用plupload进行下载,首先需要构建一个下载按钮,并为其绑定点击事件。当用户点击下载按钮时,可以通过调用plupload的API方法,向服务器发送下载请求。服务器收到下载请求后,可以将对应的文件发送给客户端进行下载。 在plupload中,可以使用settings对象的url属性来指定下载的服务器地址。可以自定义一个下载接口,当plupload发送下载请求时,该接口负责根据请求中的参数,获取文件的路径,读取文件内容,并发送给客户端进行下载。 例如,构建一个下载按钮的示例代码如下: ```html <button id="downloadBtn">下载文件</button> <script src="plupload.js"></script> <script> // 绑定下载按钮点击事件 document.getElementById('downloadBtn').addEventListener('click', function() { // 使用plupload的API方法发送下载请求 plupload.addFile({ name: 'filename.ext', // 文件名 url: 'download.php' // 下载接口地址 }); }); </script> ``` 在download.php文件中,可以获取到plupload发送的下载请求,根据请求中的参数,读取对应的文件,并将文件内容发送给客户端。下载文件的代码如下: ```php <?php $filename = $_GET['filename']; // 获取下载文件名 // 设置响应头信息,告诉浏览器下载文件 header('Content-Disposition: attachment; filename='.$filename); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '. filesize($filename)); // 输出文件内容 readfile($filename); ?> ``` 以上就是使用plupload进行文件下载的简单示例。当用户点击下载按钮时,plupload将发送下载请求到download.php接口,该接口会读取文件内容并发送给客户端,实现文件下载功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值