zoukankan      html  css  js  c++  java
  • Spring MVC上传文件

    网页上传文件,首先需要了解MIME多媒体类型

    http://www.w3school.com.cn/media/media_mimeref.asp

    再看web.xml配置,巩固之前的知识

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>webtest</display-name>
    
      <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/config/applicationContext.xml
                /WEB-INF/config/codeifAction.xml
            </param-value>
        </context-param>
    
        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/config/codeifAction.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <!-- 拦截所有以do结尾的请求 -->
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    
      <welcome-file-list>
        <welcome-file>index.do</welcome-file>
      </welcome-file-list>
    </web-app>

    接着是applicationContext.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"
        default-lazy-init="true">
    
        <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
        <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" lazy-init="false" />
    
        <!-- 另外最好还要加入DefaultAnnotationHandlerMapping,不然会被 XML或其它的映射覆盖! -->
        <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
    
        <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
    
        <!-- 支持上传文件 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    
    </beans>

    在spring中,文件被包装为multipart类型。

    接着是controller

    package com.codeif.action;
    
    import java.io.File;
    import java.util.Date;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.multipart.MultipartFile;
    
    @Controller
    public class UploadAction {
    
        @RequestMapping(value = "/upload.do")
        public String upload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, ModelMap model) {
    
            System.out.println("开始");
            String path = request.getSession().getServletContext().getRealPath("upload");//获取网页根目录的upload目录的绝对路径
            String fileName = file.getOriginalFilename();  //从页面上传过来的文件名
    //        String fileName = new Date().getTime()+".jpg";
            System.out.println(path);
            File targetFile = new File(path, fileName);
            if(!targetFile.exists()){
                targetFile.mkdirs();
            }
    
            //保存
            try {
                file.transferTo(targetFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
            model.addAttribute("fileUrl", request.getContextPath()+"/upload/"+fileName);
    
            return "result";
        }
    
    }
    最后是网页表单类型:
    <!DOCTYPE html>  
    <html>  
    <head>  
    <meta charset="utf-8">  
    <title>上传图片</title>  
    </head>  
    <body>  
    <form action="upload.do" method="post" enctype="multipart/form-data">  
    <input type="file" name="file" /> <input type="submit" value="Submit" /></form>  
    </body>  
    </html> 

    注意这里的enctype="multipart/form-data"

    这就是设置请求的mime的,默认为application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.

    这样就完成了文件上传

    可用uploadify插件美化上传

    注意,spring数据绑定中若出现了multipartFile,则不能绑定其他POJO对象,因为会在multipartFile中数据会干扰对象绑定,只能使用简单类型的数据。

  • 相关阅读:
    mysql标准写法及其他常见问题
    java动态代理_aop2
    java动态代理_aop
    oracle11g exp导出问题:部分表导不出来
    决策树算法学习笔记
    阿里云九折优惠码
    标准差(Standard Deviation) 和 标准误差(Standard Error)
    Pipeline 与 xargs
    【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群
    求最大连续和——dp
  • 原文地址:https://www.cnblogs.com/guangshan/p/4475599.html
Copyright © 2011-2022 走看看