springmvc上传文件,没有MultipartFile参数名报错直接 500,The current request is not a multipart急

IT_XiaoYong 2015-07-23 04:56:53
各位大神求助,刚开始使用springmvc不是很了解,
展示controller 代码
@RequestMapping(value = "/uploadTest",method={POST,GET})
@ResponseBody
public String uploadTest(@RequestParam(required=false,value="file")MultipartFile file,HttpServletRequest request,HttpServletResponse response) throws IOException{
if(file == null){
return "没有图片文件";
}
String fileName = file.getOriginalFilename();
String filePath = request.getSession().getServletContext().getRealPath("/")+"/upload/";
File file2 = new File(filePath, System.currentTimeMillis() + fileName);
if(!file2.getParentFile().exists()){
file2.getParentFile().mkdir();
}
if(!file2.exists()){
file2.createNewFile();
}
file.transferTo(file2);
String name = file2.getName();
return null;
}
前端请求时 有file字段名是不会报错了,但没有文件或图片字段就直接 500 了,不管怎么调试都解决不了啊,网上也搜了不少解决方案但都是不行的
org.springframework.web.multipart.MultipartException: The current request is not a multipart request
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.assertIsMultipartRequest(RequestParamMethodArgumentResolver.java:216)
at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.resolveName(RequestParamMethodArgumentResolver.java:167)
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:89)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:77)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:162)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:129)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:747)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:676)

...全文
45170 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Legendary灬 2017-11-22
  • 打赏
  • 举报
回复
我和楼主一样的问题,楼主可否分享下你解决的方法 楼上那个大哥的判断,看了一下没看懂是啥意思 ,是要把参数里的@RequestParam(required=false,value="file")MultipartFile file去掉么,从request里面取么
爱情过夜 2017-07-18
  • 打赏
  • 举报
回复
不知道,滚。 不好意思,这句话不是我回复的,室友恶搞
爱情过夜 2017-07-18
  • 打赏
  • 举报
回复
不知道,滚。
qiaoqiaonn 2016-08-18
  • 打赏
  • 举报
回复
form上加属性 enctype="multipart/form-data"
qq_25475021 2016-03-21
  • 打赏
  • 举报
回复
群主你说怎么用楼上的那个方法的
qq_25475021 2016-03-21
  • 打赏
  • 举报
回复
我的上传跟群主的一样
你猜啊才不才 2015-07-24
  • 打赏
  • 举报
回复
// 检测是不是存在上传文件 boolean isMultipart = ServletFileUpload.isMultipartContent(request); //spring 要用 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; if (isMultipart) { System.out.println("~~~111111111111111111111~~~~~~~~~~~~~~~"); response.setCharacterEncoding("utf-8"); response.setContentType("application/x-download"); response.setHeader("Accept-Ranges", "bytes"); int fSize = Integer.parseInt(String.valueOf(uploadFile.length())); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(1024 * 1024); factory.setRepository(new File("F:\\a")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(50 * 1024 * 1024); upload.setSizeMax(50 * 1024 * 1024); upload.setHeaderEncoding("UTF-8"); List<FileItem> items = null; try { // 解析request请求 System.out.println("~~~~~~~~~~~~~~~~~~~"); items = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } if (items != null) { // 解析表单项目 Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); // 如果是普通表单属性 if (item.isFormField()) { // 相当于input的name属性 <input type="text" name="content"> String name = item.getFieldName(); // input的value属性 String value = item.getString(); System.out.println("属性:" + name + " 属性值:" + value); } // 如果是上传文件 else { // Client client =new Client(); // 属性名 String fieldName = item.getFieldName(); // 上传文件路径 String fileName = item.getName(); fileName = fileName .substring(fileName.lastIndexOf("/") + 1);// 获得上传文件的文件名 //client.upload(uploadPath+"\\"+fileName); response.setHeader("Content-Length", String.valueOf(fSize)); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); try { item.write(new File(uploadPath, fileName)); message = "success"; } catch (Exception e) { message = "shi bai"; e.printStackTrace(); } 我刚好有个类似的处理,你可以参考一下
你猜啊才不才 2015-07-24
  • 打赏
  • 举报
回复
这是因为你上传的不是文件而是信息。 你可以做个判断来解决它。具体可以在网上看看别的上传例子,一般都有的。
IT_XiaoYong 2015-07-24
  • 打赏
  • 举报
回复
大哥,这个判断挺好用,不错,可以了,非常感谢

58,453

社区成员

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

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