-
-
form表单的enctype取值必须是multipart/form-data。enctype的功能是请求正文的类型
-
method必须是post
-
需要有<input type="file" />标签
-
使用commons-fileupload组件实现文件,需要导入该组件相应的支撑jar包
-
commons-fileupload-1.3.1.jar
-
commons-io-2.4.jar
-
<!-- 文件上传组件 --> <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>
<form action="user/upload" method="post" enctype="multipart/form-data"> <input type="file" name="avatar" /> <input type="submit" value="上传" /> </form>
-
-
-
在springmvc.xml配置文件中配置文件解析器,而且bean的id是一个固定值,不能改变
<!-- 配置文件解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 文件上传的相关限制,例如文件的大小10M=10*1024*1024=10485760,这里是以字节为单位 --> <property name="maxUploadSize" value="10485760" /> </bean>
-
- 控制器方法的参数名称必须和表单上文件的input标签的name值相同
import javax.servlet.http.HttpServletRequest; import org.springframework.web.multipart.MultipartFile; @Controller @RequestMapping(value="user") public class UserController{ @RequestMapping(value="upload") public String upload(HttpServletRequest request, MultipartFile avatar) throws Exception { //使用fileupload组件上传文件 //文件保存的地址 String path = request.getSession().getServletContext().getRealPath("/uploads/"); File file = new File(path); if(!file.exists()){ file.mkdirs(); } //处理文件上传项 // 获取文件上传的名称 String filename = avatar.getOriginalFilename(); //使用uuid生成唯一的名称作为文件的名称 String uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid+"_"+filename; //上传文件 avatar.transferTo(new File(path, filename)); return "user"; } }