首先想利用需要导入commons-fileupload的jar包,还有他依赖的commons-io
因为我们用到的是spring中的MultipartFile接口,她有一个实现类CommonsMultipartFile,这个类使用了commons-fileupload组建进行实现的。
下面是springmvc配置文件中的配置,配置Multipart的解析器,解析器还有一些属性,读者可以自己试一试
<!-- 配置文件上传 需要配置commons-fiupload组建支持的CommonsMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="1024000"></property>
</bean>
下面是我的jsp页面的表单,和一般的上传一样,表单传输数据的格式要设置为multipart/form-data类型
<form action="${pageContext.request.contextPath }/springmvc/testFileupload" method="post" enctype="multipart/form-data">
File:<input type="file" name="file">
FileDesc:<input type="text" name="fileDesc">
<input type="submit">
</form>
先面是我的controller中的方法,其中MultipartFile file是为了获取文件,String fileDesc是为了获取文件的描述其中request.getServletContest().getRealPath("file/" + file.getOriginalFilename())是用来获取我项目下的一个文件夹的绝对路径,将文件上传到这个路径下,获取到了MultipartFile对象,可以用他的getInputStream()方法获取文件的输入流,然后利用流将文件写到我想要的目录下。
@RequestMapping("/testFileupload")
public String testFileupload(@RequestParam("fileDesc") String fileDesc,@RequestParam("file") MultipartFile file,
HttpServletRequest request) throws IOException {
System.out.println(fileDesc);
System.out.println(file.getOriginalFilename());
String filePath = request.getServletContext().getRealPath("/file/" + file.getOriginalFilename());
File targetFile = new File(filePath);
System.out.println(filePath);
InputStream is = file.getInputStream();
OutputStream os = new FileOutputStream(targetFile);
byte[] buffer = new byte[1024];
int len;
while((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
release(is);
release(os);
return "success";
}