SpringMVC实现文件上传一、文件上传的必要前提1、form表单的enctype取值必须是multipart/from-data 一般情况下的默认值是application/x-www-form-urlencoded enctype:是表单请求正文的类型2、method属性取值必须是Post3、提供一个文件选择域二、文件上传的原理分析当form表单的enctype取值不是默认值后request.getParameter()将失效。enctype“application/x-www-form-urlencoded”时form表单的正文内容是keyvaluekeyvaluekeyvalue当form表单的enctype取值为Mutilpart/form-data时请求正文内容就变成每一部分就是MIME类型描述的正文-----------------------------7de1a433602ac 分界符 Content-Disposition: form-data; nameuserName 协议头 aaa 协议的正文 -----------------------------7de1a433602ac Content-Disposition: form-data; namefile; filenameC:\Users\zhy\Desktop\fileupload_demofile\b.txt Content-Type: text/plain 协议的类型MIME 类型 bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -----------------------------7de1a433602ac--借助第三方组件实现文件上传使用 Commons-fileupload 组件实现文件上传需要导入该组件相应的支撑 jar 包Commons-fileupload 和commons-io。commons-io 不属于文件上传组件的开发 jar 文件但Commons-fileupload 组件从 1.1 版本开始它工作时需要 commons-io 包的支持。三、SpringMVC传统方式文件上传SpringMVC框架提供了MultipartFile对象该对象表示SpringMVC框架提供了MultipartFile对象该对象表示上传的文件要求变量名称必须和表单file标签的 name属性名称相同。前端jsp代码h3SpringMVC上传文件/h3 form actionuser/fileupload2 methodpost enctypemultipart/form-data 选择上传文件:input typefile nameupload/br input typesubmit value上传/ /form控制器代码块/* * 使用SpringMVC的方式进行文件上传 * */RequestMapping(/fileupload2)publicStringfileupload2(HttpServletRequest request,MultipartFile upload)throwsIOException{System.out.println(SpringMVC文件上传);String pathrequest.getSession().getServletContext().getRealPath(/uploads/);File filenewFile(path);if(!file.exists()){//创建文件夹file.mkdir();}String filenameupload.getOriginalFilename();String uuidUUID.randomUUID().toString().replace(-,);filenameuuid-filename;upload.transferTo(newFile(path,filename));returnsuccess;}配置文件解析器springmvc.xml!-- 配置文件解析器对象要求id名称必须是multipartResolver --beanidmultipartResolverclassorg.springframework.web.multipart.commons.CommonsMultipartResolverpropertynamemaxUploadSizevalue10485760//bean注意文件上传的解析器 id是固定的不能起别的名称否则无法实现请求参数的绑定。不光是文件其他字段也将无法绑定 并且前端上传文件的input的name值一定要和控制器中的MultipartFile upload的名称一致否则无法实现。四、springmvc跨服务器方式的文件传输传统方式的文件上传指的是我们上传的文件和访问的应用存在于同一台服务器上。 并且上传完成之后浏览器可能跳转。jsp代码块form action/user/fileupload3 methodpost enctypemultipart/form-data 选择文件input typefile nameupload /br/ input typesubmit value上传 / /form控制器代码块/** * 跨服务器文件上传 * return */RequestMapping(/fileupload3)publicStringfileuoload3(MultipartFile upload)throwsException{System.out.println(跨服务器文件上传...);// 定义上传文件服务器路径String pathhttp://localhost:9090/uploads/;// 说明上传文件项// 获取上传文件的名称String filenameupload.getOriginalFilename();// 把文件的名称设置唯一值uuidString uuidUUID.randomUUID().toString().replace(-,);filenameuuid_filename;// 创建客户端的对象Client clientClient.create();// 和图片服务器进行连接WebResource webResourceclient.resource(pathfilename);// 上传文件webResource.put(upload.getBytes());returnsuccess;}导入jar包配置pom.xml文件!-- 配置文件上传解析器 --beanidmultipartResolver!--id的值是固定的--classorg.springframework.web.multipart.commons.CommonsMultipartResolver!-- 设置上传文件的最大尺寸为 5MB --propertynamemaxUploadSizevalue5242880/value/property/bean
郑州网站建设
网页设计
企业官网