我正在尝试使用REST服务建立一个使用html和Spring 3.0.6的简单上传。我已经在线学习了教程,但MultipartFile参数始终为null。这是配置和代码:
应用context.xml中:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="2000000"/>
</bean>
的pom.xml:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
HTML:
<html>
<head>
<title>Upload a file please</title>
</head>
<body>
<h1>Please upload a file</h1>
<form method="post" action="/site/restServices/artworkUpload/" enctype="multipart/form-data">
<input type="text" name="name"/>
<input type="file" name="file"/>
<input type="submit"/>
</form>
</body>
</html>
REST控制器:
@POST
@Path("/artworkUpload")
public String uploadFile(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
try {
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
// store the bytes somewhere
return "redirect:uploadSuccess";
} else {
return "redirect:uploadFailure";
}
}
catch (Exception ex)
{
}
return null;
}
我从Spring的教程中复制了示例,但无论我改变什么,file参数始终为null。 “name”将在文本框中显示该值,但文件将为null。
我也尝试使用Jersey,我收到文件的InputStream,但FormDataContentDisposition为null,所以我无法确定文件类型。
这也在Jetty上运行。
我错过了什么?
答案 0 :(得分:3)
我记得我通过在构建路径中添加其他库来解决同样的问题:
commons-fileupload-1.2.2.jar
commons-io-2.1.jar
我希望这会对你有所帮助。
修改强>
确定。最后我有时间讨论这个问题。首先,为什么要使用标准的java功能来构建休息服务(注释@POST,@ Path)?因为使用Spring,最好将REST MVC期货用于REST。互联网上有很多关于此的信息。这是reference documentation中的特殊部分。这里也是good article on IBM site。关于如何使用Spring MVC构建REST控制器的非常好的描述在Spring in Action (last 3-d edition)。
这是我如何实现简单的文件上传功能:
休息控制器:
@Controller
@RequestMapping("/rest/files")
public class FilesController {
...
@RequestMapping(value="/rest/files", method=RequestMethod.POST)
public String uploadFile(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
try {
if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
// store the bytes somewhere
return "redirect:uploadSuccess";
} else {
return "redirect:uploadFailure";
}
}
catch (Exception ex)
{
}
return "/testFileDownload";
}
}
HTML:
<!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>Test file upload</title>
</head>
<body>
<h1>Please upload a file</h1>
<form method="post" action="rest/files" enctype="multipart/form-data">
<input type="text" name="name" /> <input type="file" name="file" /> <input
type="submit" />
</form>
</body>
</html>
在dispatcher-servlet.xml中查看解析程序配置:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="file" value="multipart/form-data"/>
<entry key="html" value="text/html"/>
</map>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>
我希望我没有浪费我的时间,这对你来说仍然是必要的。 )
编辑2
这里是very good tutorial,其中描述了如何使用Spring 3.1构建RESTful Web服务。
答案 1 :(得分:1)
帮助我连接这个库:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
所有图书馆:
<dependencies>
<!-- Spring 3 MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- Apache Commons file upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!-- JSTL for c: tag -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
请参阅http://viralpatel.net/blogs/spring-mvc-multiple-file-upload-example/