1.父页面打开新窗口
<t:dgToolBar title="附件上传" icon="icon-putout" funname="goUpload"></t:dgToolBar>
//附件上传
function goUpload() {
var wbContractTastId = $("#wbContractTastId").val();
var url = "wbContractTaskAttaController.do?goUpload&wbContractTastId="+wbContractTastId;
window.open(url);
}
2.springMVC的请求转发
@RequestMapping(params = "goUpload")
public ModelAndView goUpload(WbContractTaskAttaEntity wbContractTaskAtta,HttpServletRequest req) {
if (StringUtil.isNotEmpty(wbContractTaskAtta.getId())) {
wbContractTaskAtta = wbContractTaskAttaService.getEntity(WbContractTaskAttaEntity.class, wbContractTaskAtta.getId());
req.setAttribute("wbContractTaskAttaPage", wbContractTaskAtta);
}
if(wbContractTaskAtta.getWbContractTastId() != null){
req.setAttribute("wbContractTaskAttaPage", wbContractTaskAtta);
}
return new ModelAndView("com/szgd/web/wbContractTaskAtta-upload");
}
3.文件上传页面的jsp
<form id="upload">
<input type="file" name="file">
<input name="wbContractTastId" type="text" hidden="true" value="${wbContractTaskAttaPage.wbContractTastId}">
<input type="button" value="提交" οnclick="upload()">
</form>
4.相关js代码
使用ajax异步提交,所以form里面没有 enctype="multipart/form-data",也可以
function upload() {
var form = new FormData(document.getElementById("upload"));
$.ajax({
url:"wbContractTaskAttaController.do?doAdd",
type:"post",
data:form,
processData:false,
contentType:false,
success:function(data){
var jsonObj = JSON.parse(data);
tip(jsonObj.msg);
if(jsonObj.msg == '文件上传成功'){
//刷新父页面的操作
window.opener.location.reload();
//关闭当前页的操作
window.close();
}
}
});
}
5.controller执行操作
@RequestMapping(params = "doAdd")
@ResponseBody
public AjaxJson doAdd(WbContractTaskAttaEntity wbContractTaskAtta, HttpServletRequest request) {
AjaxJson j = new AjaxJson();
message = "维保合同任务附件更新成功";
UploadFile uploadFile = new UploadFile(request);
MultipartHttpServletRequest multipartRequest = uploadFile.getMultipartRequest();
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
String name = file.getOriginalFilename();//获取文件原始名称
Double size = (double) file.getSize()/1024/1024;//获取文件大小 bytes -- kb -- mb
if(name.equals("")){
message = "请选择上传文件";
j.setMsg(message);
return j;
}
if(name.contains(".jpg") || name.contains(".png") ||
name.contains(".txt") || name.contains(".word")||
name.contains(".excel") || name.contains(".ppt")){
//存储文件
if (file.getSize() != 0) {
//文件夹
String filePath = "CONTRACT_TASK" + "/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date()) + "/" + wbContractTaskAtta.getWbContractTastId();
String root = ConfigUtil.getValue("FILE_ROOT_PATH") + "/" + filePath;
File applyFileDirectory = new File(root);
if (!applyFileDirectory.exists()) {
applyFileDirectory.mkdirs();
}
File applyFile = new File(root + "/" + name);
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), applyFile);
WbContractTaskAttaEntity wbContractTaskAttaEntity = new WbContractTaskAttaEntity();
wbContractTaskAttaEntity.setCreateTime(new Date());
wbContractTaskAttaEntity.setAttachmentSize(size);
wbContractTaskAttaEntity.setOptUserId(request.getSession().getAttribute("Current_UserId").toString());
wbContractTaskAttaEntity.setOptUserName(request.getSession().getAttribute("Current_UserName").toString());
wbContractTaskAttaEntity.setDeleteFlag(0);
wbContractTaskAttaEntity.setAttachmentName(name);
wbContractTaskAttaEntity.setAttachmentUrl(root);
systemService.save(wbContractTaskAttaEntity);
message = "文件上传成功";
} catch (IOException e) {
message = "文件上传失败";
}
}
}else{
message = "不支持该文件格式";
}
}
j.setMsg(message);
return j;
}
核心主要是通过request获取MultipartFile,以及MultipartFile API的一些方法的使用。
适合有一定代码基础的朋友看。