SSM 文件上传以及加载出现500错误的处理
最近用SSM写项目的时候遇见了文件上传这个问题,困扰了一些时间,下面是解决方案。
SSM文件上传
1.导包
文件上传主要有两个包:
这里有两个文件的链接,可以直接去下载:
io
fileupload
点进去之后选择这个文件,然后点击下载就可以了:
下载解压完成之后,选择好第一个进行导入。(另一个包同理)
2.SpringMVC中的配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大传输文件的大小 -->
<property name="maxUploadSize" value="#{1024*1024*100}"></property>
<!-- 默认的编码格式 -->
<property name="defaultEncoding" value="utf-8"></property>
</bean>
这个id一个要写这个maxUploadSize当然这个类还有很多的属性可以设置,在这就不一一进行列举了。
3.创建页面
在这使用的是jsp,当然用html也是可以的。注意文件的传输一定要写这个enctype="multipart/form-data"
<form action="${ctp }/file" method="post" enctype="multipart/form-data">
用户头像:<input type ="file" name="heddering"/>
用户名:<input type ="text" name="username"/>
<input type="submit" value="提交">
</form>
4.处理器
@RequestMapping("/file")
public String saveFile(@RequestParam(value="username",required=false)String name,
@RequestParam("heddering")MultipartFile file,
Model model) throws IllegalStateException, IOException {
//file:这个就是前面表单中传输的文件
//name属性的值
System.out.println("文件的名字"+file.getName());
//文件的名字
System.out.println("文件的名字"+file.getOriginalFilename());
//将文件进行保存
file.transferTo(new File("E:\\文档\\"+file.getOriginalFilename()));
model.addAttribute("msg","文件上传成功");
//返回相应的页面
return "forward:/index";
}
这样一个简单的文件传输就完成了。
下面简单介绍多个文件上传并且上传到数据库(数据库中设置成varchar就可以,主要保存照片存放的位置信息):
1.前端页面:
主要注意:保存到同一张表中的文件,input标签中的name属性的值要保持一致
<form action="../saveprice" method="post" enctype="multipart/form-data">
<div id="a1">
<img id="fileimg" src="" />
<span class="btn upload">
上传头像
<input type="file" class="upload_pic" id="upload" name = "picture" οnclick="upCh('upload','fileimg')">
</span>
</div>
<div class="b1">
<div class="b2">
<p>身份证正面</p>
<div class="b3">
<div class="b4">
<img id="fileimg1" src="" class="img" />
<span class="btn1 upload" >
点击选择图片
<input type="file" class="upload_pic" id="upload1" name = "picture" οnclick="upCh('upload1','fileimg1')">
</span>
</div>
</div>
</div>
<div class="b2">
<p>身份证反面</p>
<div class="b3">
<div class="b4">
<img id="fileimg2" src=""class="img" />
<span class="btn1 upload">
点击选择图片
<input type="file" class="upload_pic" id="upload2" name = "picture" οnclick="upCh('upload2','fileimg2')">
</span>
</div>
</div>
</div>
</div>
<div class="b1">
<div class="b2">
<p>职业资格证</p>
<div class="b3">
<div class="b4">
<img id="fileimg3" src=""class="img" />
<span class="btn1 upload">
点击选择图片
<input type="file" class="upload_pic" id="upload3" name = "picture" οnclick="upCh('upload3','fileimg3')">
</span>
</div>
</div>
</div>
<div class="b2">
<p>其他证书</p>
<div class="b3">
<div class="b4">
<img id="fileimg4" src=""class="img" />
<span class="btn1 upload">
点击选择图片
<input type="file" class="upload_pic" id="upload4" name = "other_picture" οnclick="upCh('upload4','fileimg4')">
</span>
</div>
</div>
</div>
</div>
<div class="b1">
<div class="b2">
<p>其他证书</p>
<div class="b3">
<div class="b4">
<img id="fileimg5" src=""class="img" />
<span class="btn1 upload">
点击选择图片
<input type="file" class="upload_pic" id="upload5" name="other_picture" onclick="upCh('upload5','fileimg5')">
</span>
</div>
</div>
</div>
</div>
<input type = "submit" value = "下一步" id="reg3">
</form>
2.处理器
主要注意:利用对象数组分别对于照片进行保存
@RequestMapping(value = "/saveprice",method = RequestMethod.POST)
public String saveUserPrice(@RequestParam(value = "picture") MultipartFile[] files,
@RequestParam(value = "other_picture")MultipartFile[] otherFiles,
HttpServletRequest request,
HttpSession session) throws IOException, ServletException {
//获取该文件下static/img在本电脑上的路径(比如E:\shool\static\img)
String root = request.getServletContext().getRealPath("static/img");
//将照片循环进行便利
for (MultipartFile file:files){
//查看文件是否为空
if(!file.isEmpty()){
//将文件保存到指定的路径
file.transferTo(new File(root+"\\"+file.getOriginalFilename()));
}
}
//创建javabean对象,将照片保存的地址一一的设置进去
PictureWithBLOBs pictureWithBLOBs = new PictureWithBLOBs();
pictureWithBLOBs.sethSculpture(root+"\\"+files[0].getOriginalFilename());
pictureWithBLOBs.setShenfz(root+"\\"+files[1].getOriginalFilename());
pictureWithBLOBs.setShenff(root+"\\"+files[2].getOriginalFilename());
pictureWithBLOBs.setZhiye(root+"\\"+files[3].getOriginalFilename());
pictureWithBLOBs.setUser((String) session.getAttribute("user"));
//保存到数据库
userPriceService.saveUserPrice(pictureWithBLOBs);
//其他的证书
for (MultipartFile file:otherFiles){
OtherPicture picture = new OtherPicture();
picture.setUser((String) session.getAttribute("user"));
//查看文件是否为空
if(!file.isEmpty()){
file.transferTo(new File(root+"\\"+file.getOriginalFilename()));
picture.setoPicture(root+"\\"+file.getOriginalFilename());
}
otherPictureService.saveOtherPicture(picture);
}
return "manger";
}
在运行的过程中遇到了500的错误页面
Servlet.init() for servlet springDispatcherServlet threw exception
当时报错的信息显示上面那句话。找了很多的决解办法,最终找到了错误的原因:
jar包
1.首先检查jar包导入了吗
2.如果导入了之后还是报错,那么将这两个jar包在放在tomcat下面,如图:
这样问题就解决了。