今天写商家上传图片步骤的时候,发现一直报空指针异常,经过不断排查发现,在jsp文件里的file传递到controller层的时候无法被MultipartFile类接收,经过十几个小时的查询以及自己不断测试最终发现jsp文件中缺少了一行代码
<meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />
将其修改后错误解决
顺便记录一下文件上传的方法
首先导入依赖 使用文件上传需要 用到两个依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
下一步就是我这次遇到问题的jsp文件
<%--
Created by IntelliJ IDEA.
User: 25493
Date: 2021/5/25
Time: 22:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Login</title>
<meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />
</head>
<body>
<form action="/addMenuImpl" method="post" enctype="multipart/form-data">
<input type="file" id="pictureFile" name="pictureFile">
<input type="submit">
</form>
</body>
</html>
然后是controller层的
@RequestMapping("/addMenuImpl")
public String addMenuImpl(Item item,MultipartFile pictureFile,Model model) throws Exception {
//保存文件(图片)时,这个文件(图片)有的时候文件名可能会重复,你保存多了会把原来的文件(图片)给覆盖掉,这就不太合适了,所以可以为每个文件(图片)生成一个新的文件名
//新的文件(图片)名字
String newName = UUID.randomUUID().toString();
String oldName = pictureFile.getOriginalFilename();
//截取文件(图片)的后缀,从.开始截取
String sux = oldName.substring(oldName.lastIndexOf("."));
//新建本地文件流
File file = new File("D:\\Document\\JavaWeb\\ooms\\web\\uploadImg\\" + newName + sux);
//写入本地磁盘
pictureFile.transferTo(file);//transferTo方法可以将上传的文件(图片)写入本地磁盘
//保存文件(图片)到数据库
item.setPic(newName + sux);
itemService.addPic(item);
model.addAttribute("item", item);
model.addAttribute("msg", "增加商品信息成功");
return "show";
}
}