springmvc文件上传抛出空指针异常求助,求大神帮助

qq_35957962 2018-08-29 10:20:52
项目由status2改为springmvc框架,开发工具是eclipse,spring所有包版本是4.2.4,改完后涉及到文件上传的时候,如果表单中只有一个file类型的文件input,上传没有问题,但有了其他的文本框后,程序就报错,无法绑定参数,没法进入到Controller中的对应方法,下面是异常和前后台的截图
...全文
457 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35957962 2018-08-30
  • 打赏
  • 举报
回复
引用 10 楼 qq_17495033 的回复:
MultipartHttpServletRequest 用这个接受参数吧。
不好意思,昨晚加班开会讨论需求,现在才有时间回复,我在转为MultipartHttpServletRequest时候报错了,无法获取到MultipartHttpServletRequest
qq_35957962 2018-08-30
  • 打赏
  • 举报
回复
引用 9 楼 lwb314 的回复:
引用 6 楼 qq_35957962 的回复:
引用 4 楼 lwb314 的回复:
可能是附件超过了SPRINGMVC上传附件的大小。
不是的,我用的同一个文件,如果form表单中只有一个<input type="file" name="file">就可以上传成功,要是多一个<input type="text" name="title">这样的就不行
springmvc本身是有限制上传附件大小功能的,你没设置的话估计就是默认值,默认值没多大,你自己百度查一下
不好意思,昨天下午四点开会,晚上加班讨论需求和原型设计,应该不是springmvc的问题,感觉是status2那里还有遗留的问题,我现在换下jar包,这是我下载源码后看到的,里面还有地方引用的status2的类
qq_35957962 2018-08-30
  • 打赏
  • 举报
回复
引用 12 楼 qq_35957962 的回复:
引用 9 楼 lwb314 的回复:
引用 6 楼 qq_35957962 的回复:
引用 4 楼 lwb314 的回复:
可能是附件超过了SPRINGMVC上传附件的大小。
不是的,我用的同一个文件,如果form表单中只有一个<input type="file" name="file">就可以上传成功,要是多一个<input type="text" name="title">这样的就不行
springmvc本身是有限制上传附件大小功能的,你没设置的话估计就是默认值,默认值没多大,你自己百度查一下
不好意思,昨天下午四点开会,晚上加班讨论需求和原型设计,应该不是springmvc的问题,感觉是status2那里还有遗留的问题,我现在换下jar包,这是我下载源码后看到的,里面还有地方引用的status2的类


问题解决了,是因为项目中还有一个包为RapidFramework(John).jar,这个包里也有fileupload,系统调用了这个里面的fileupload,导致上传失败的,现在删除了这个包,文件上传就成功了
做一个梦想家 2018-08-29
  • 打赏
  • 举报
回复
MultipartHttpServletRequest 用这个接受参数吧。
  • 打赏
  • 举报
回复
引用 6 楼 qq_35957962 的回复:
引用 4 楼 lwb314 的回复:
可能是附件超过了SPRINGMVC上传附件的大小。
不是的,我用的同一个文件,如果form表单中只有一个<input type="file" name="file">就可以上传成功,要是多一个<input type="text" name="title">这样的就不行
springmvc本身是有限制上传附件大小功能的,你没设置的话估计就是默认值,默认值没多大,你自己百度查一下
qq_35957962 2018-08-29
  • 打赏
  • 举报
回复
引用 7 楼 weixin_39309867 的回复:
form表单中你用的是<input type="submit" value="upload"/>这样的吧?你改成button,onclick试试,把你的form后面的action去掉,明白我的意思吗?
最开始改的时候,使用的easyui的表单提交,后来我改成button提交了的,也不行
诺丽果 2018-08-29
  • 打赏
  • 举报
回复
form表单中你用的是<input type="submit" value="upload"/>这样的吧?你改成button,onclick试试,把你的form后面的action去掉,明白我的意思吗?
qq_35957962 2018-08-29
  • 打赏
  • 举报
回复
引用 2 楼 lwb314 的回复:
controller层代码贴出来,还有报错哪行代码
package com.gbicc.system.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

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


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.gbicc.bll.PaginateInfo;
import com.gbicc.bll.controller.BaseController;
import com.gbicc.bll.sys.bean.User;
import com.gbicc.cfl.util.FileUtils;
import com.gbicc.cfl.util.Struts2Utils;
import com.gbicc.system.bean.FileInfo;
import com.gbicc.system.bean.Menu;
import com.gbicc.system.bean.Notice;
import com.gbicc.system.bean.Users;
import com.gbicc.system.service.FileInfoService;
import com.gbicc.system.service.NoticeService;
import com.gbicc.system.service.ParamentsService;
import com.gbicc.system.service.RoleService;
import com.gbicc.system.util.JsonUtils;
@Controller
@RequestMapping("/notice")
public class NoticeController extends BaseController
{
@Autowired
private ParamentsService paramentsService;




@Autowired
private NoticeService noticeService;

@Autowired
private RoleService roleService;


@RequestMapping("/noticeSave")
public void noticeSave(@RequestParam(value="file")MultipartFile file){
Notice notice = new Notice();
List<File> files = new ArrayList<File>();
List<String> fileFileName = new ArrayList<String>();
User user = new User();
user.setIdstr("1");
UserDetails users = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Users userTemp = noticeService.findUserByUserName(users.getUsername());
String json = null;
boolean b=true;
boolean c=false;
String allowedTypes;
Long maximumSize;
String title ="";
String content ="";
if( files!= null){
allowedTypes="text/plain,application/msword,application/octet-stream,application/pdf";
String[] allowedTypesStr = allowedTypes.split(",");
//将允许的文件类型列表放入List中
List allowedTypesList = new ArrayList();
for(int i = 0;i < allowedTypesStr.length; i++){
allowedTypesList.add(allowedTypesStr[i]);
}
//判断上传文件的类型是否是允许的类型之一
// for(int i = 0; i < file.size();i++){
// if(!allowedTypesList.contains(fileContentType.get(i))){
// System.out.println("上传文件中包含非法文件类型"+fileContentType.get(i));
// ServletActionContext.getServletContext().setAttribute("errorMsg", "上传文件中包含非法文件类型");
// json = JsonUtils.getJson("上传文件中包含非法文件类型");
// b=false;
// //return "error";
// }
// }
//判断文件的大小
for(int i = 0 ;i < files.size();i++){
// 判断文件长度
maximumSize=(long) (1024*1024*10);
if (maximumSize < files.get(i).length()) {
request.getServletContext().setAttribute("errorMsg", fileFileName.get(i)+ "文件过大");
//json = JsonUtils.getJson(fileFileName.get(i)+ "文件过大");
//b=false;
} else if(files.get(i).length()==0){
json = JsonUtils.getJson(9);
b=false;
}
}
}
String saveId=null;
try {
if(b){
saveId=noticeService.saveNotice(notice,userTemp.getId());
json = JsonUtils.getJson(1);
}
} catch (Exception e1) {
json = JsonUtils.getJson(0);
e1.printStackTrace();
}
if( file!= null){

// root = NoticeAction.class.getResource("").getPath().split("WEB-INF")[0]+ "upload/";
/*String title=notice.getTitle();*/
//取得文件上传路径(用于存放上传的文件)
//String id=notice.getId();
//String root = ServletActionContext.getServletContext().getRealPath("/upload")+"\\"+id+"\\";
//原来的String root = ServletActionContext.getServletContext().getRealPath("/upload")+"\\notice"+"\\";
String root =paramentsService.findValueByCode("NOTICEDIR")+"/";
File rootDirFile = new File(root);
Notice notice1 = noticeService.findNoticeBytitle(title);

//判断上述路径是否存在,如果不存在则创建该路径
if(!rootDirFile.exists()){
rootDirFile.mkdirs();
}
for(int i = 0; i < files.size(); i++)
{

root = paramentsService.findValueByCode("NOTICEDIR")+"/";//保存问一个文件后路径会变为带文件名所以得再定义

if(b){

String type="0";
String finame=null;
//上传文件
try {
int a=fileFileName.get(i).split("\\.").length-1;
type=fileFileName.get(i).split("\\.")[a].toString();

Date date=new Date();
SimpleDateFormat formatter=new SimpleDateFormat("yyyyMMddHHmmss");
String time=formatter.format(date);
System.out.println(time);
finame=time+i+"."+type;
File upPath = new File(root, finame);
//File upPath = new File(root, fileFileName.get(i));
b= FileUtils.copyFile(files.get(i), upPath);

} catch (Exception e) {
e.printStackTrace();
}

//保存附件信息
root=root+finame;
//root=root+fileFileName.get(i);
noticeService.saveFile(fileFileName.get(i),root,saveId,files.get(i).length(),type,finame);
}
}
}
/*try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(json);
response.getWriter().close();
} catch (IOException e) {
e.printStackTrace();
}*/
}
这就是controller中的方法,进不来这一层,感觉代码在框架封装参数的时候就出错了
qq_35957962 2018-08-29
  • 打赏
  • 举报
回复
引用 4 楼 lwb314 的回复:
可能是附件超过了SPRINGMVC上传附件的大小。
不是的,我用的同一个文件,如果form表单中只有一个<input type="file" name="file">就可以上传成功,要是多一个<input type="text" name="title">这样的就不行
  • 打赏
  • 举报
回复
可能是附件超过了SPRINGMVC上传附件的大小。
qq_35957962 2018-08-29
  • 打赏
  • 举报
回复
引用 1 楼 weixin_39309867 的回复:
你的js中调用的action写的名字是noticeSave.action,但你的controller中写的是noticeSavel,知道不,多写了个l,还有你的代码和错误信息不全啊
这个是最开的是方法,进不去,然后复制了一个,改成了sava1,正确的请求是和这个一样的内容,就是进不去
  • 打赏
  • 举报
回复
controller层代码贴出来,还有报错哪行代码
诺丽果 2018-08-29
  • 打赏
  • 举报
回复
你的js中调用的action写的名字是noticeSave.action,但你的controller中写的是noticeSavel,知道不,多写了个l,还有你的代码和错误信息不全啊

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧