本文就这次对于图片上传的学习遇到的问题说说自己的经历。
先来看看jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/ping/upload" method="post" enctype="multipart/form-data">
<input type="hidden" name="method" value="upload" /> <input
type="file" name="file" /> <input type="submit" value="upload" />
</form>
</body>
</html>
接下来是controller的代码
@ResponseBody
@RequestMapping(value="upload", method=RequestMethod.POST)
public String upload(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
//页面控件的文件流,对应form表单name
MultipartFile multipartFile = multipartRequest.getFile("file");
//原文件的名字加后缀,如 1.jsp
String realFileName= multipartFile.getOriginalFilename();
//拼成完整的文件保存路径加文件,用时间来做简单的处理,可以用md5之类加密处理
String date= dateformat.format(new Date());
String fileName = "D:/testimg/"+date+realFileName;
File file = new File(fileName);
try {
//获取request中file的字节流复制到对应位置
multipartFile.transferTo(file);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
通过上面代码,就可以将文件上传到D:/testimg/ 目录下
在学习过程中,难免有问题
问题、1
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
错误是报在代码的这一行,看起来像是类型转换问题(真是奇怪)
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
解决方案
在dispatcherServlet.xml中添加
<!-- 上传图片 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8" />
问题、2
java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
这个和jar包有关系,上传文件需要两个jar包
commons-fileupload.jar
commons-io.jar
导入即可,如果是maven上,在pom.xml中配置
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
有新的发现,会马上更新,如果哪里有错误,希望指出,谢谢!