使用spring MVC框架进行文件上传,步骤如下:
1:配置web.xml文件。定义DispatcherServlet,DispatcherServlet处理的请求(.htm)也在同一个web.xml文件里使用url-mapping定义映射。
- <servlet>
- <servlet-name>upload</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>upload</servlet-name>
- <url-pattern>*.htm</url-pattern>
- </servlet-mapping>
2:定义upload-servlet.xml文件。
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <!-- set the max upload size100MB -->
- <property name="maxUploadSize">
- <value>104857600</value>
- </property>
- <property name="maxInMemorySize">
- <value>4096</value>
- </property>
- </bean>
- <bean id="urlMapping"
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/upload.htm">uploadController</prop>
- </props>
- </property>
- </bean>
- <bean id="uploadController" class="FileUploadController">
- <property name="commandClass"><value>FileUploadBean</value></property>
- <property name="uploadDir"><value>E:/</value></property>
- <property name="formView"><value>fail</value></property>
- <property name="successView"><value>confirmation</value></property>
- </bean>
request中的multipart实体进行处理,如果没有这个方法,上传将不能进行。
<--------------------------控制类------------------------->
- public class FileUploadController extends SimpleFormController {
- private static Log log =
- LogFactory.getLog(FileUploadController.class);
- private String uploadDir;//上传文件路径
- protected ModelAndView onSubmit(HttpServletRequest request,
- HttpServletResponse response, Object cmd, BindException errors)
- throws Exception {
- FileUploadBean bean = (FileUploadBean) cmd;
- byte[] bytes = bean.getFile();
- //cast to multipart file so we can get additional information
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
- CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");
- String uploadDir = this.getUploadDir();
- File dirPath = new File(uploadDir);
- if (!dirPath.exists()) {
- dirPath.mkdirs();
- }
- String sep = System.getProperty("file.separator");
- if (log.isDebugEnabled()) {
- log.debug("uploading to: " + uploadDir + sep +
- file.getOriginalFilename());
- }
- File uploadedFile = new File(uploadDir + sep
- + file.getOriginalFilename());
- FileCopyUtils.copy(bytes, uploadedFile);
- System.out.println("********************************");
- System.out.println(uploadedFile.getAbsolutePath());
- System.out.println(bytes.length);
- System.out.println("********************************");
- return new ModelAndView(getSuccessView() + ".jsp");
- }
- protected void initBinder(HttpServletRequest request,
- ServletRequestDataBinder binder) throws ServletException {
- binder.registerCustomEditor(byte[].class,
- new ByteArrayMultipartFileEditor());
- }
- public void setUploadDir(String uploadDir){
- this.uploadDir = uploadDir;
- }
- public String getUploadDir(){
- return this.uploadDir;
- }
- }
- public class FileUploadBean {
- private byte[] file;
- public void setFile(byte[] file) {
- this.file = file;
- }
- public byte[] getFile() {
- return file;
- }
- }
4:定义一个form表单index.jsp
- <form method="post" action="upload.htm" enctype="multipart/form-data">
- <input type="file" name="file"/>
- <input type="submit"/>
- </form>
confirmation.jsp如下:
- <%@ page contentType="text/html; charset=GBK" %>
- <html>
- <head>
- <title>
- successView
- </title>
- </head>
- <body bgcolor="#ffffff">
- <h1>
- Upload Successful
- </h1>
- </body>
- </html>
fail.jsp如下:
- <html>
- <head>
- <title>Upload a file please</title>
- </head>
- <body>
- <h1>no file,Please upload a file</h1>
- <form method="post" action="uploadfile.htm" enctype="multipart/form-data">
- <input type="file" name="file"/>
- <input type="submit"/>
- </form>
- </body>
- </html>
6:运行tomcat。
预览 ie里面:http://localhost/springmvc/index.jsp
注:
a:文件目录为tomcat-HOME/webapps/springmvc/
.jsp文件都放在根目录下,.class文件放在/WEB-INF/classes/中
其他文件放在/WEB-INF/里面。
b:如果连上面的你都有疑问,那还是去看看spring的基础知识吧。