首先在pom.xml中导入依赖:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
配置SpringMVC配置文件mvc.xml:
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxInMemorySize" value="40960" />
</bean>
注意此处的id="multipartResolver",否则会导致
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade
cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
或者
nested exception is java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: ServletWebRequest:
两种错误。
配置前台表单提交:
<form action="/file/upload" method="post" enctype="multipart/form-data" >
<input type="file" name="filename">
<input type="submit">
</form>
controller层:
@Controller
@RequestMapping("/file")
public class FileUploadController {
@RequestMapping("/upload")
public String uploadImage(HttpServletRequest request) throws IOException {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
boolean isFileExist = commonsMultipartResolver.isMultipart(request);
if (isFileExist)
{
MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
//获取文件
MultipartFile multipartFile=multipartHttpServletRequest.getFile("filename");
System.out.println("文件名:"+multipartFile.getName());
//获取文件真实路径
String realPath = request.getServletContext().getRealPath("/upload");
System.out.println(realPath);
//随机出文件名
int random = (int) (Math.random() * 10000);
System.out.println(random);
String originalFilename = multipartFile.getOriginalFilename();
System.out.println(originalFilename);
String substring = originalFilename.substring(originalFilename.indexOf("."));
System.out.println(substring);
String filePathAndFileName = realPath+ random + substring;
System.out.println(filePathAndFileName);
File file = new File(filePathAndFileName);
multipartFile.transferTo(file);
}
return "welcome";
}
}