您的位置:首页 > 编程语言 > Java开发

用plupload+springMVC实现文件的上传

2016-04-19 15:05 477 查看
因为新公司项目初创,很多工具模块都没搭起来。这里对我用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;
}

}


8e83
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc plupload