spring支持在网络应用程序处理文件上传,提供拔插的org.springframework.web.multipart.MultipartResolver对象 。
在写上传文件的前提下需提供两个jar包:
1.添加上传拦截,可指定上传的大小
<!-- 上传拦截,如最大上传值及最小上传值 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- one of the properties available; the maximum file size in bytes --> <property name="maxUploadSize" value="100000" /> </bean>
2.添加java后台处理的API
@RequestMapping(value = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // 去理上传写文件代码 }
具体文件
spring_mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 注解资源扫描包路径 --> <context:component-scan base-package="org.spring.mvc" /> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀,在requestmapping输入的地址后自动调用该类进行视图解析--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/" /><!-- 跳转页面的前缀路径 如 /web-inf/user/ --> <property name="suffix" value=".jsp"></property><!-- 跳转页面后缀 如 helloWorld.jsp--> </bean> <!-- 上传拦截,如最大上传值及最小上传值 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- one of the properties available; the maximum file size in bytes --> <property name="maxUploadSize" value="100000" /> </bean> </beans>
FileUploadController.java文件
package org.spring.mvc.upload; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spring.mvc.HelloWorldController; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; /** * 上传文件 * @author chenyw * */ @Controller @RequestMapping(value = "/toFileUpload") public class FileUploadController { private Logger logger = LoggerFactory.getLogger(HelloWorldController.class); /** * 单文件上传 * @param name @RequestParam 取得name字段的值 * @param file 文件 * @return * @throws IOException */ @RequestMapping(value = "/oneFileUpload", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) throws IOException { logger.info("name:"+name); logger.info("上传文件:"+file.getOriginalFilename()); if (!file.isEmpty()) { this.copyFile(file.getInputStream(), file.getOriginalFilename()); } return "fileUpload/success"; } /** * 多文件上传 * @param request * @param name * @return * @throws Exception */ @RequestMapping(value = "/multipartFileUpload",method = RequestMethod.POST) public String upload2( MultipartHttpServletRequest request , @RequestParam("name") String name // 页面上的控件值 ) throws Exception { List<MultipartFile> files = request.getFiles("file"); for( int i=0; i<files.size() ;i++){ if(! files.get(i).isEmpty()) { logger.info("上传文件:"+files.get(i).getOriginalFilename()); this.copyFile(files.get(i).getInputStream(), files.get(i).getOriginalFilename()); } } logger.info("success"); return "fileUpload/success"; } /** * 写文件到本地 * @param in * @param fileName * @throws IOException */ private void copyFile(InputStream in,String fileName) throws IOException{ FileOutputStream fs = new FileOutputStream("d:/upload/" + fileName); byte[] buffer = new byte[1024 * 1024]; int bytesum = 0; int byteread = 0; while ((byteread = in.read(buffer)) != -1) { bytesum += byteread; fs.write(buffer, 0, byteread); fs.flush(); } fs.close(); in.close(); } }
单文件上传页面oneFileUpload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'oneFileUpload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my onefileUpload page. <br> <form method="POST" action="toFileUpload/oneFileUpload" enctype="multipart/form-data"> <input type="text" name="name"/> <input type="file" name="file"/> <input type="submit"/> </form> </body> </html>
多文件上传页面multipartFileUpload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'multipartFileUpload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is multipartFileUpload page. <br> <form method="POST" action="toFileUpload/multipartFileUpload" enctype="multipart/form-data"> <input type="text" name="name"/><br> <input type="file" name="file"/><br> <input type="file" name="file"/><br> <input type="submit"/><br> </form> </body> </html>