【求助】springmvc上传图片提示java.lang.NullPointerException

hentai龍 2019-04-15 12:37:43
报错截图



BookControll.java部分代码

package com.book.hellobook.controller;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.book.hellobook.dao.BookDao;
import com.book.hellobook.entity.Book;

@Controller
@RequestMapping(value = "/bookCon")
public class BookController {

@RequestMapping(value="/add",method=RequestMethod.POST)
private String fildUpload(@RequestParam(value="file",required=false) MultipartFile file,
HttpServletRequest request)throws Exception{
Book book=new Book();
BookDao bookdao = new BookDao();
//使用UUID给图片重命名,并去掉四个“-”
String name = UUID.randomUUID().toString().replaceAll("-", "");
//获取图片名称
//String imageName=file.getOriginalFilename();
//获得文件类型(可以判断如果不是图片,禁止上传)
//String contentType=file.getContentType();
//获得文件后缀名
//String suffixName=contentType.substring(contentType.indexOf("/")+1);
//获取文件的扩展名
String ext = FilenameUtils.getExtension(file.getOriginalFilename());
//设置图片上传路径
String filePath = request.getSession().getServletContext().getRealPath("/static/img");
System.out.println(filePath);
//以绝对路径保存重名命后的图片
file.transferTo(new File(filePath+"/"+name + "." + ext));
//把图片存储路径保存到数据库
book.setBookImg("upload/"+name + "." + ext);
//获取当前时间
Date date= new Date();
SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = sd.format(date);
//获取表单提交的分类Id
int bookclassId = Integer.parseInt(request.getParameter("bookfl"));
//重定向到查询所有用户的Controller,测试图片回显
book.setBookName(request.getParameter("bookName"));
book.setBookAut(request.getParameter("bookAut"));
book.setBookIntr(request.getParameter("bookIntr"));
book.setBookTime(now);
book.setBookName(request.getParameter("bookName"));
bookdao.bookAdd(book,bookclassId);
return "hello";
}


web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>HelloBook</display-name>

<servlet>
<servlet-name>HelloBook</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:springmvc.xml
</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloBook</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>


springmvc.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

<!-- 扫面包下面所有的controller -->
<context:component-scan
base-package="com.book.hellobook.controller" />
<!-- 注解驱动 -->
<mvc:annotation-driven />


<mvc:default-servlet-handler />
<mvc:resources mapping="/static/**" location="/static/" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>

<!-- 上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<!-- 最大内存大小 -->
<property name="maxInMemorySize" value="10240"/>
<!-- 最大文件大小,-1为不限制大小 -->
<property name="maxUploadSize" value="-1"/>
</bean>
</beans>

表单提交页代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HelloBook后台管理</title>
</head>
<body>
<form action="/HelloBook/bookCon/add.action" method="post" enctype="multipart/form-data">
<span>图书名字</span><input name="bookName" type="text" /><br />
<span>上传图书封面</span><input name="bookImg" type="file" accept="image/png, image/jpeg, image/gif, image/jpg"/><br />
<span>作者</span><input name="bookAut" type="text" /><br />
<span>简介</span><input name="bookIntr" type="text" /><br />
<select name="bookfl">
<option value="1">武侠</option>
<option value="2">科幻</option>
<option value="3">轻小说</option>
<option value="4">散文</option>
</select>
<input type="submit">
</form>
</body>
...全文
304 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hentai龍 2019-04-22
  • 打赏
  • 举报
回复
引用 4 楼 TroubleBoy丶 的回复:
[quote=引用 3 楼 qq_41961657 的回复:]
[quote=引用 1 楼 TroubleBoy丶的回复:]@RequestParam(value="file",required=false) MultipartFile file ,去掉 @RequestParam 注释 试试?

单这个应该不能去掉的吧[/quote]

既然是POST请求,又为何要加@RequestParam 注解呢? 建议你配置一个swagger 通过swagger测试接口,定位问题所在。看你的错误信息,BookController 38行 空指针异常 String ext = FilenameUtils.getExtension(file.getOriginalFilename()); 也就是 file为空,那就是file没有传进来。fildUpload(MultipartFile file, HttpServletRequest request) 这样既可
[/quote]
发现错误了,是@RequestParam的value与form的name值没对应上
TroubleBoy丶 2019-04-16
  • 打赏
  • 举报
回复
引用 3 楼 qq_41961657 的回复:
[quote=引用 1 楼 TroubleBoy丶的回复:]@RequestParam(value="file",required=false) MultipartFile file ,去掉 @RequestParam 注释 试试?
单这个应该不能去掉的吧[/quote] 既然是POST请求,又为何要加@RequestParam 注解呢? 建议你配置一个swagger 通过swagger测试接口,定位问题所在。看你的错误信息,BookController 38行 空指针异常 String ext = FilenameUtils.getExtension(file.getOriginalFilename()); 也就是 file为空,那就是file没有传进来。fildUpload(MultipartFile file, HttpServletRequest request) 这样既可
hentai龍 2019-04-15
  • 打赏
  • 举报
回复
引用 1 楼 TroubleBoy丶的回复:
@RequestParam(value="file",required=false) MultipartFile file ,去掉 @RequestParam 注释 试试?
单这个应该不能去掉的吧
hentai龍 2019-04-15
  • 打赏
  • 举报
回复
引用 1 楼 TroubleBoy丶的回复:
@RequestParam(value="file",required=false) MultipartFile file ,去掉 @RequestParam 注释 试试?
好的,我待会试试,谢谢
TroubleBoy丶 2019-04-15
  • 打赏
  • 举报
回复
@RequestParam(value="file",required=false) MultipartFile file ,去掉 @RequestParam 注释 试试?

81,094

社区成员

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

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