二:上传多个文件1:创建文件上传的jsp文件(test_fileupload.jsp)
<body> <from enctype="multipart/form-data" method="post" action="/upload.do"> 选择图片:<input type="file" name="photo"> <input type="submit" value="上传"> </from> </body>2:创建文件上传的Controller
在上传文件的方法中添加参数 MultiparFile,该参数本身是一个接口,该接口提供了文件上传的方法
// 获得文件名 getOriginalFilename() // 判断是否上传了文件,如果没有选择文件上传的话,此时结果为true isEmpty() //获得上传文件的文件类型 getContentType() // 将文件上传至指定目录中 transferTo(File file) // 获取表单中input的name值 getName() // 获取上传文件的byte数组 getBytes() // 获取上传文件的InputStream对象 getInputStream()方法中需要的另一个参数为 HttpSession,其作用是获取服务器中用来存放上传文件的路径
package com.doaoao.comtroller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; import java.io.File; @Controller public class UploadController { @RequestMapping("/upload.do") public ModelAndView upload(MultipartFile photo, HttpSession session) throws Exception{ ModelAndView mv = new ModelAndView(); // 判断用户是否上传文件 if(!photo.isEmpty()){ // 取得服务器上传的文件路径 String path = session.getServletContext().getRealPath("/upload"); // 获取文件名称 String filename = photo.getOriginalFilename(); // 限制文件的上传类型 if("image/png".equals(photo.getContentType())){ File file = new File(path,filename); photo.transferTo(file); }else{ // 文件上传失败时 mv.addObject("msg","请选择文件格式为png"); mv.setViewName("/upload_fail"); return mv; } }else{ mv.addObject("msg","请上传一张png格式图片"); mv.setViewName("/upload_fail"); return mv; } // 文件上传成功时 mv.setViewName("/upload_success"); return mv; } }3:两种文件上传方式
# 1 使用 apache中的commons-io 和 commons-fileupload实现文件上传
# 2 使用servlet3.0实现文件上传
## 第一种文件上传方式:使用 apache中的commons-io 和 commons-fileupload实现文件上传
<!-- 导入相关jar包 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>修改配置文件 springmvc.xml
<!--注册multipartResolver,由DispatcherServlet来负责调用,id的名称必须写为 multipartResolve--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--设置字符编码防止文件名乱码--> <property name="defaultEncoding" value="utf-8"/> <!--设置上传文件的总大小,单位是字节b--> <property name="maxUploadSize" value="1048576"/> <!--设置单个上传文件的大小,单位是字节b--> <property name="maxUploadSizePerFile" value="1048576"/> <!--设置内存缓冲区的大小,当超过该值的时候会写入到临时目录--> <property name="maxInMemorySize" value="1048576"/> <!--设置临时目录--> <property name="uploadTempDir" value="tempupload"/> <!--默认是false,如果设置为true的话,不会将文件路径去除,在IE浏览器下上传时会将路径名也作为文件名上传--> <property name="preserveFilename" value="false"/> <!--是否使用懒加载,默认是false--> <property name="resolveLazily" value="true"/> </bean>上方配置文件中设置临时目录的作用:
1:提高安全性:将文件上传到临时目录,相当于对客户端隐藏了文件真实存放的目录
2:便于管理:当用户取消文件上传或文件上传失败时,可直接操作临时目录即可,无需对真实目录进行操作
## 第二种文件上传的方式:使用servlet3.0实现文件上传
修改web.xml配置文件的内容
<!--使用servlet3.0实现文件上传--> <multipart-config> <!--临时文件路径,临时文件路径需配置在第一行--> <location>/temp</location> <!--单个上传文件的最大值,单位是byte--> <max-file-size>100</max-file-size> <!--总上传文件的最大值--> <max-request-size>52428800</max-request-size> <!--内存缓冲区的大小,当超过该值时,会写入到临时文件中,单位是byte--> <file-size-threshold>1024</file-size-threshold> </multipart-config>修改配置文件 springmvc.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>
1:修改jsp文件种的内容
<from enctype="multipart/form-data" method="post" action="/upload.do"> 选择图片:<input type="file" name="photos"> 选择图片:<input type="file" name="photos"> 选择图片:<input type="file" name="photos"> <input type="submit" value="上传"> </from>2:在Controller种添加方法,方法种添加参数 MultipartFile[],并在参数前加上注解@RequestParam
package com.doaoao.comtroller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpSession; import java.io.File; @Controller public class UploadController { @RequestMapping("/upload.do") public ModelAndView upload(@RequestParam MultipartFile[] photos, HttpSession session) throws Exception{ ModelAndView mv = new ModelAndView(); // 取得服务器上传的文件路径 String path = session.getServletContext().getRealPath("/upload"); for(MultipartFile photo:photos) { // 判断用户是否上传文件 if (!photo.isEmpty()) { // 获取文件名称 String filename = photo.getOriginalFilename(); // 限制文件的上传类型 if ("image/png".equals(photo.getContentType())) { File file = new File(path, filename); photo.transferTo(file); } else { // 文件上传失败时 mv.addObject("msg", "请选择文件格式为png"); mv.setViewName("/upload_fail"); return mv; } } else { mv.addObject("msg", "请上传一张png格式图片"); mv.setViewName("/upload_fail"); return mv; } } // 文件上传成功时 mv.setViewName("/upload_success"); return mv; } }...
...