文件上传最原始的方式就是使用form表单提交要上传的文件,然后后端使用JavaIO流接收,再将文件从内存中写到硬盘上,即完成文件的上传。本质上文件上传都是如此的过程,但是那样的使用开发起来太麻烦了。
如果使用springMVC框架进行开发的话,那么一切都将变得简洁起来。
当然,首先要编写的就是form表单,这个不管用什么方式都是需要的。
<form action="user/fileUpload2" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload" />
<input type="submit" value="上传"/>
</form>
其次想要使用框架的使得,就是要引入相应的jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
然后,配置spring文件,创建文件引入jar中的CommonsMultipartResolver对象,注意,这里的id值必须为multipartResolver,因为这个jar包还依赖于别的jar包。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--10*1024*1024*1024=10737418240=10G-->
<property name="maxUploadSize" value="10737418240"/>
</bean>
接下来就是springMVC控制器的编写,创建一个类,以注解的方式,让spring框架给我们创建其对象。在类上写一个RequestMapping注解,提供这个类的方法的父路径。然后就是方法的具体实现。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("fileUpload2")
public String fileUpload2(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("fileUpload2...");
//使用fileupload组件完成文件上传
String path = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(path);
if (!file.exists()){
//创建文件夹
if (file.mkdirs()){
System.out.println(path+": 文件夹创建成功");
} else {
System.out.println("文件夹创建失败");
}
}
//上传文件项
String fileName = upload.getOriginalFilename();
//把文件的名称设置为唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
//完成文件上传
fileName = uuid + "_" + fileName;
fileName= URLEncoder.encode(fileName, "UTF-8");
upload.transferTo(new File(path, fileName));
System.out.println("上传完成");
return "success";
}
}
这样项目就可以跑起来了,上传的时候要注意文件的大小,不能太大。获取文件名称的时候,要注意对中文的字符进行相应的处理。