在使用SpringMVC上传文件时,可以使用两种方式:
引入Maven依赖
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
然后配置springmvc.xml文件
<!--配置CommonsMultipartResolver将其加入Ioc容器,实现文件上传功能
springIoc容器在初始化时,会自动找一个multipartResolver的bean
并将其加入Ioc容器中
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<!--上传单个文件的最大值,单位Byte-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
下面开始干:
第一种方式:
- fileupload.jsp
<!--第一种方式-->
<form action="testUpload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload"/><br/>
<input type="submit" value="上传"/>
</form>
- UserController
/**
*
* 第一种方式
*
* @param request
* @param upload
* @return
* @throws IOException
*/
@RequestMapping("/testUpload")
public String testUpload(HttpServletRequest request, MultipartFile upload) throws IOException {
System.out.println("springmvc文件上传中.....");
//文件上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads");
//判断该路径是否存在
File file = new File(path);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
//说明是上传文件项
//获取上传文件的 名称
String filename = upload.getOriginalFilename();
//把文件的名称 设置为唯一值,UUID
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
//完成文件上传
upload.transferTo(new File(path,filename));
return "success";
}
第二种方式:(使用字节流的方式)
- fileupload.jsp
<!--第二种方式-->
<form action="testupload2" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="file"/><br/>
描述:<input name="desc" type="text"/>
<input type="submit" value="上传"/>
</form>
- UserController
/**
*
* 第二种方式:操作流的方式实现文件上传
*
* @param desc
* @param file
* @return
* @throws Exception
*/
@RequestMapping("/testupload2")
public String testupload2(@RequestParam("desc") String desc,
@RequestParam("file") MultipartFile file) throws Exception{
System.out.println("文件描述信息:"+desc);
//jsp中上传的文件:file
//输入流
InputStream input = file.getInputStream();
String filename = file.getOriginalFilename();
//输出流,将文件放到什么位置
OutputStream out = new FileOutputStream("f:\\"+filename);
//将输入流输入输出流,byte为字节数组
byte[] bs = new byte[1024];
int len = -1;
while((len = input.read(bs)) != -1){
out.write(bs,0,len);
}
//关闭操作
out.close();
input.close();
//将文件上传到服务器中的某个硬盘文件中
return "success";
}