问题
I need to upload file from browser to server. I use spring 3.2 as my web framework.
So i configured my app like this.
1 - I got 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">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>racoonsoft.chaos.settings</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>admin/library</welcome-file>
</welcome-file-list>
</web-app>
2 - MainConfig class
@Configuration
@Import({WebConfig.class })
public class MainConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public static ScheduledAnnotationBeanPostProcessor scheduledAnnotationBeanPostProcessor() {
return new ScheduledAnnotationBeanPostProcessor();
}
@Bean
public static StandardServletMultipartResolver multipartResolver() {
StandardServletMultipartResolver resolver = new StandardServletMultipartResolver();
return resolver;
}
}
3 - Controller to handle multipart uploads
@Controller
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
maxFileSize=1024*1024*10, // 10MB
maxRequestSize=1024*1024*50)
public class FileUpload
{
public static final int UPLOAD_RESULT_OK = 100000;
@Autowired
BookDao book_dao;
@RequestMapping(value = "/admin/library/upload_file", method = RequestMethod.POST)
public String saveFiles(@RequestParam("file-file") MultipartFile file) throws IOException
{
if (!file.isEmpty())
{
byte[] bytes = file.getBytes();
return "redirect:caps/total_fail";
}
else
{
return "redirect:caps/total_fail";
}
}
}
4 - jsp where i placed my form to submit files
...<form method="post" action="/admin/library/upload_file" enctype="multipart/form-data">
<input type="text" name="name"/>
<input type="file" name="file-file"/>
<input type="submit"/>
</form>...
When i submit my form i got an Exception
org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'file-file' is not present
org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:202)
I got no idea why. When i remove @RequestParam annotaion i got my method invoked but file parameter = null. What is my problem?
回答1:
I fixed this problem by adding the following to my spring config file:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
(The error I was getting was "org.springframework.web.bind.MissingServletRequestParameterException: Required MultipartFile parameter 'myFile' is not present
回答2:
i can do it with
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/",100000, 200000, 50000);
registration.setMultipartConfig(multipartConfigElement);
}
回答3:
@user64141 is right but if using Java config instead of xml, try
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
回答4:
You also need the MultipartFilter configured for your webapp. According to its Javadoc, it resolves multipart requests using the MultipartResolver (but you have that one configured already). You'll need to map it to (part of) the request path for Controller that handles the file uploads.
First, add the MultipartFilter to your web.xml:
<filter>
<filter-name>multipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
Next, map the filter to (a part of) the URL that needs to accept file uploads:
<filter-mapping>
<filter-name>multipartFilter</filter-name>
<url-pattern>/admin/library/upload_file</url-pattern>
</filter-mapping>
来源:https://stackoverflow.com/questions/16037747/spring-upload-file-problems