服务器:
新建springmvc-servlet.xml
新建cn.han.controller包
新建form.jsp
upload.jsp
还需要导入jar包,包括Springmvc的所有包
上面报错说的是 无法从String转化成CommonsMultipartFile ,其实就是 我的form表单有问题,把文件名发过去了 而没有真正传送二进制文件,需要设置
下面是第二个报错:
这里一看就知道是配置CommonsMultipart渲染器的上传文件大小限制的原因
下面还有一组报错
这个意思就是文件夹不存在 ,确实不存在,需要在D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test目录下创建fileupload文件夹,因为eclipse默认部署的地方就是在D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\下面,然而我们指定了目录 ,却没有那个目录就报错了。
Apache Tomcat/8.0.33
开发环境:Eclipse Java EE IDE for Web Developers.
Version: Mars.2 Release (4.5.2)
Build id: 20160218-0600
Java version "1.8.0_65"
SpringMVC:4.2.6
新建一个Dynamic Web Project
新建web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <!-- 配置Servlet name 和class-->
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!-- 配置servlet mapping -->
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>*.html</url-pattern>
- </servlet-mapping>
- <!-- 配置filter name和class -->
- <filter>
- <filter-name>CharacterEncodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>utf-8</param-value>
- </init-param>
- </filter>
- <!-- 配置filter mapping -->
- <filter-mapping>
- <filter-name>CharacterEncodingFilter</filter-name>
- <url-pattern>*.html</url-pattern>
- </filter-mapping>
- </web-app>
- <?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:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- jsp 渲染器 -->
- <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/jsp/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- <!-- 对上传的支持
- 需要commons-fileupload.jar和commons-io.jar的支持
- 设置(multipart渲染器) multipart就是file upload
- -->
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <!-- one of the properties available; the maximum file size in bytes -->
- <!-- 10mb -->
- <property name="maxUploadSize" value="1000000"/>
- </bean>
- <!-- 注解扫描 -->
- <context:component-scan base-package="cn.han.controller"/>
- <!-- ... -->
- </beans>
新建HelloWorldController.Java
- package cn.han.controller;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.text.Normalizer.Form;
- import javax.servlet.http.HttpServletRequest;
- 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 org.springframework.web.multipart.commons.CommonsMultipartFile;
- import org.springframework.web.servlet.ModelAndView;
- @Controller
- public class HelloWorldController {
- //|表单页面
- @RequestMapping("/form")
- public ModelAndView form()
- {
- ModelAndView mView=new ModelAndView();
- mView.setViewName("form");
- return mView;
- }
- //|上传处理页面
- @RequestMapping(path="/upload",method = RequestMethod.POST)
- public ModelAndView upload(@RequestParam("file")CommonsMultipartFile upfile,HttpServletRequest req) throws IOException{
- //|获取在Web服务器上的 绝对路径
- String path =req.getRealPath("/fileupload");
- System.out.println(path);
- //|获取输入流
- InputStream is=upfile.getInputStream();
- //|文件输出流
- OutputStream os =new FileOutputStream(new File(path,upfile.getOriginalFilename()));
- //|循环写入
- int length=0;
- byte [] buffer=new byte[128];
- while((length=is.read(buffer))!=-1)
- {
- os.write(buffer,0, length);
- }
- is.close();
- os.close();
- //===渲染===
- ModelAndView mView=new ModelAndView();
- mView.setViewName("upload");
- //|返回至渲染器
- return mView;
- }
- }
- <%@ 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>上传文件</title>
- </head>
- <body>
- <form action="upload.html" method="POST" enctype="multipart/form-data">
- <input type="file" name="file"/>
- <input type="submit" value="上传" />
- </form>
- </body>
- </html>
- <%@ 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>上传结果</title>
- </head>
- <body>
- 恭喜~上传成功~
- </body>
- </html>
commons-io.jar,commons-fileupload.jar
commons-logging-1.2.jar
jastl-1.1.2.jar,standard-1.1.2.jar
下面是我遇到的报错以及解决办法
- HTTP Status 500 - Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found
- type Exception report
- message Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found
- description The server encountered an internal error that prevented it from fulfilling this request.
- exception
- org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found
- org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74)
- org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
- org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:688)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:520)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:353)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:173)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
- org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
- org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- root cause
- java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.springframework.web.multipart.commons.CommonsMultipartFile]: no matching editors or conversion strategy found
- org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302)
- org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)
- org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
- org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:47)
- org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:688)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestParam(HandlerMethodInvoker.java:520)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:353)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:173)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
- org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
- org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.
上面报错说的是 无法从String转化成CommonsMultipartFile ,其实就是 我的form表单有问题,把文件名发过去了 而没有真正传送二进制文件,需要设置
- enctype="multipart/form-data"
- HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)
- type Exception report
- message Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)
- description The server encountered an internal error that prevented it from fulfilling this request.
- exception
- org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:979)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- root cause
- org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 100000 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)
- org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:162)
- org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)
- org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1091)
- org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:930)
- org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- root cause
- org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (164406) exceeds the configured maximum (100000)
- org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
- org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
- org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)
- org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)
- org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)
- org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)
- org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1091)
- org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:930)
- org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.
- <property name="maxUploadSize" value="1000000"/>
下面还有一组报错
- HTTP Status 500 - D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)
- type Exception report
- message D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)
- description The server encountered an internal error that prevented it from fulfilling this request.
- exception
- java.io.FileNotFoundException: D:\eclipse-jee-workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\01upload_test\fileupload\psbe.jpg (系统找不到指定的路径。)
- java.io.FileOutputStream.open0(Native Method)
- java.io.FileOutputStream.open(FileOutputStream.java:270)
- java.io.FileOutputStream.<init>(FileOutputStream.java:213)
- java.io.FileOutputStream.<init>(FileOutputStream.java:162)
- cn.han.controller.HelloWorldController.upload(HelloWorldController.java:38)
- sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- java.lang.reflect.Method.invoke(Method.java:497)
- org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:178)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
- org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
- org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
- org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
- org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
- org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
- note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs.
- Apache Tomcat/8.0.33
项目运行截图