文件上传的必要条件:
1.form表单的enctype取值必须是:mutipart/form-data (默认是:application/x-www-form-urlencoded)
2.method属性为:post
3.提供一个文本选择域<input type="file" />
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
1.传统的方式上传
form表单
<form action="/fileupload/f1" method="post" enctype="multipart/form-data" > 选择文件:<input type="file" name="upload"> <input type="submit" value="上传"> </form>
controller类,生成的文件在target根目录下的uploads文件夹中
@Controller @RequestMapping("/fileupload") public class FileuploadController { /** * 传统的文件上传方式 */ @RequestMapping("/f1") public String f1(HttpServletRequest request) throws Exception { //用fileupload组件完成文件上传 String path = request.getSession().getServletContext().getRealPath("/uploads"); //判断该路径是否存在 File file = new File(path); if(!file.exists()){ //创建该文件夹 file.mkdirs(); } //解析request对象,获取文件上传项 DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); //解析request List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { //判断当前item对象是否是文件上传项 if(item.isFormField()){ //说明普通表单项 }else { //说明文件上传项 String fileName = item.getName(); //把文件名称设置为唯一值 uuid String uuid = UUID.randomUUID().toString().replace("-", ""); fileName = uuid +"_"+fileName; //完成文件上传 item.write(new File(path,fileName)); //删除临时文件 item.delete(); } } return "success"; } }
2.springmvc文件上传
1.配置文件解析器
<!-- 配置文件解析器对象,要求id名称必须是multipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--字节单位--> <property name="maxUploadSize" value="10485760"/> </bean>
2.页面表单
<%--springmvc模式--%> <form action="/fileupload/f2" method="post" enctype="multipart/form-data" > 选择文件:<input type="file" name="upload"> <input type="submit" value="上传"> </form>
3.controller
/** * springmvc模式的上传 */ @RequestMapping("/f2") public String f2(HttpServletRequest request, MultipartFile upload) throws IOException { String path = request.getSession().getServletContext().getRealPath("/uploads"); File file = new File(path); if(!file.exists()){ file.mkdirs(); } //获取文件名字 String filename = upload.getOriginalFilename(); String uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid +"_"+filename; //完成上传 upload.transferTo(new File(path,filename)); return "success"; }