用plupload+springMVC实现文件的上传

因为新公司项目初创,很多工具模块都没搭起来。这里对我用plupload框架+springMVC自带上传解析器进行一个上传功能的记录。


1.引入jar包,除了springMVC的包外,我们需要org.apache.commons.fileupload-1.2.0.jar,org.apache.commons.io-1.4.0.jar这两个包。点此下载

由于公司用了MAVEN进行项目管理,所以我们只需要在pom.xml里配置即可



2.引入plupload.js。直接在官网进行下载即可。http://www.plupload.com/

3.创建前台页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<script src="./Scripts/jquery/jquery-2.1.4.js"></script>
<script src="./js/upload/plupload.full.min.js"></script>
</head>
<body>
	<h1>上传文件</h1> 
	
	<div id="fileDiv">
		<div><button id="browse">选择文件</button></div>
		<div id="filelist"></div>
	</div>
	<button id="start_upload">开始上传</button>
	
</body>
<script type="text/javascript">
    //实例化一个plupload上传对象
    var uploader = new plupload.Uploader({
    	//这个是选择文件的button
        browse_button : 'browse', 
      	//服务器端的上传地址
        url : 'http://localhost:8080/geekplus-beetle/api_v1/upload/file', 
    });    
    //在实例对象上调用init()方法进行初始化
    uploader.init();
    
    //文件添加时,在容器里显示待上传的文件列表
    uploader.bind('FilesAdded',
    	function(uploader, files) {
    		for (var i in files) {
    			//在页面迭代显示
    			$('#filelist').append('<div><input type="hidden" name="attachmentId" id="id'+files[i].id+'"/>'+files[i].name + ' (' + plupload.formatSize(files[i].size) + ')<div id="'+files[i].id+'"></div></div></br>');
    		}
    	}
    );
    //文件上传进度显示
    uploader.bind('UploadProgress',
    		function(uploader, file) {
    			$('#'+file.id).html("   "+file.percent + "%");
    		}
    );
    //单个文件上完成后事件
    uploader.bind('FileUploaded',
    		function(up, file,result) {
    			$('#id'+file.id).val(result.response);
    		}
    );
    //全部完成后的事件
    uploader.bind('UploadComplete',
    		function(up, files,result) {
    			alert("您选择的文件已经全部上传,总计共" + files.length + "个文件");
    		}
    );
   
    //给"开始上传"按钮注册事件
    document.getElementById('start_upload').onclick = function(){
        uploader.start(); //调用实例对象的start()方法开始上传文件,当然你也可以在其他地方调用该方法
    }
    </script>
</html>

4.创建附件对象的实体

package com.geekplus.beetle.excel.entity;

import com.geekplus.beetle.base.entity.BaseEntity;

public class AttachmentEntity extends BaseEntity {
	/**  **/
	private static final long serialVersionUID = 1L;

	/**
	 * 附件ID
	 */
	private Long attachmentId;
	
	/**
	 * 附件名称
	 */
	private String attachmentName;
	
	/**
	 * 附件路径
	 */
	private String attachmentPath;
	
	/**
	 * 附件原名
	 */
	private String attachmentRealName;
	/**
	 * 附件大小
	 */
	private String attachmentSize;
	
	public Long getAttachmentId() {
		return attachmentId;
	}
	public void setAttachmentId(Long attachmentId) {
		this.attachmentId = attachmentId;
	}
	public String getAttachmentName() {
		return attachmentName;
	}
	public void setAttachmentName(String attachmentName) {
		this.attachmentName = attachmentName;
	}
	public String getAttachmentPath() {
		return attachmentPath;
	}
	public void setAttachmentPath(String attachmentPath) {
		this.attachmentPath = attachmentPath;
	}
	public String getAttachmentRealName() {
		return attachmentRealName;
	}
	public void setAttachmentRealName(String attachmentRealName) {
		this.attachmentRealName = attachmentRealName;
	}
	public String getAttachmentSize() {
		return attachmentSize;
	}
	public void setAttachmentSize(String attachmentSize) {
		this.attachmentSize = attachmentSize;
	}
	
}
5.创建附件对象的 dao、service等,此处省略

6.创建上传文件的接口controller

package com.geekplus.beetle.excel.action;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Random;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.geekplus.beetle.excel.biz.AttachmentService;
import com.geekplus.beetle.excel.entity.AttachmentEntity;
import com.geekplus.common.CommonUtil;

/**
 * 文件上传类
 *
 * @Company GeekPlus
 * @Project beetle
 * @since 1.0.0
 * @Author qiunan
 * @Date 2016年4月15日 下午3:44:40
 * @Description
 *
 */
@Controller
@RequestMapping("/api_v1/upload")
public class uploadAction {

	@Autowired
	private AttachmentService attachmentService;

	/**
	 * 多个文件上传
	 * 
	 * @author qiunan 2016年4月15日
	 * @param request
	 * @param response
	 * @return
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@ResponseBody
	@RequestMapping("/file")
	public String uploadFile(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException {
		//初始化通用multipart解析器
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
		String resultStr = "";

		//判断请求中是否有文件上传
		if (!multipartResolver.isMultipart(request)) {
			//请求为空,直接返回
			return null;
		}

		//解析请求,将文件信息放到迭代器里   
		MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
		Iterator<String> iter = multiRequest.getFileNames();
		
		//迭代文件,存放到某一路径里
		while (iter.hasNext()) {
			//取得上传文件  
			MultipartFile file = multiRequest.getFile(iter.next());
			
			if (null != file) {
				//取得当前上传文件的文件名称  
				String myFileName = file.getOriginalFilename();
				//判断文件是否存在,文件名为空,则说明文件不
				if (myFileName.trim() != "") {
					//重命名上传后的文件名  
					String fileName =this.getName(myFileName);
					//定义上传路径  
					String path = CommonUtil.FILE_UPLOAD_PATH + fileName;
					File localFile = new File(path);
					file.transferTo(localFile);
					//往数据库里插一条附件信息
					resultStr = this.insertAttachInfo(fileName, path, file, resultStr);
				}
			}
		}
		return resultStr;
	}
	
	public String getName(String myFileName){
		//获取一个50以内的随机值
		Random ra =new Random();
		int raNum = ra.nextInt(100);
		//获取当前系统时间
		Long nowTime =System.currentTimeMillis();
		String resultName = nowTime + "" + raNum + myFileName;
		return resultName;
		
	}
	
	public String insertAttachInfo(String name,String path,MultipartFile file,String resultStr){
		AttachmentEntity attachmentEntity = new AttachmentEntity();
		Long attachmentId = attachmentService.getAttachmentId();
		attachmentEntity.setAttachmentId(attachmentId);
		attachmentEntity.setAttachmentName(name);
		attachmentEntity.setAttachmentRealName(file.getOriginalFilename());
		attachmentEntity.setAttachmentPath(path);
		attachmentEntity.setAttachmentSize(file.getSize() + "");
		attachmentEntity.setCreateBy("admin");
		attachmentEntity.setLastUpdateBy("admin");
		attachmentService.addAttachmentInfo(attachmentEntity);
		resultStr += attachmentId+",";
		return resultStr;
	}

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值