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

    文件上传

    配置MultipartResolver

    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="5242880" />
    </bean>
    

    dispatcher-servlet.xml配置文件配置MultipartResolverid属性必须要有且值只能是multipartResolver,否则会报错。

    为了让CommonsMultipartResolver正常工作,必须先将Jakarta Commons FileUploadJakarta Commons io的类包添加到类路径下。

    defaultEncoding必须和用户JSPpageEncoding属性一致,以便正确读取表单内容。

    编写控制器

    @Controller
    @RequestMapping("demo")
    public class DemoController {
        @RequestMapping("/upload")
        public String upload(HttpServletRequest request,
                             @RequestParam("file") MultipartFile file) throws Exception {
            if (!file.isEmpty()) {
                file.transferTo(new File("F:/" + file.getOriginalFilename()));
                request.setAttribute("info", "上传成功!");
            } else {
                request.setAttribute("info", "上传失败!");
            }
            return "message";
        }
    }
    

    Spring MVC 会将上传文件绑定到MultipartFile对象中。MultipartFile常用方法说明:

    • byte [] getBytes():获取文件数据。
    • String getContentType():获取文件MIME类型,如image/pjpegtext/plain等。
    • InputStream getInputStream():获取文件流。
    • String getName():获取表单中文件组件的名字。
    • String getOriginalFileName():获取上传文件的原名。
    • long getSize():获取上传文件的字节大小,单位是byte
    • boolean isEmpty():是否有上传的文件。
    • void transferTo(File dest):可以使用该文件将上传的文件保存到一个目标文件中。

    编写文件上传表单页面

    <html>
    <head>
        <title>Spring MVC 文件上传</title>
    </head>
    <body>
        <h2>请选择文件:</h2>
        <form method="post" action="${basePath}demo/upload"
              enctype="multipart/form-data">
            <input type="file" name="file" />
            <input type="submit" />
        </form>
    </body>
    </html>
    

    负责上传文件的表单和一般表单有一些区别,表单的类型编码必须是multipart/form-data类型。

    问题

    问题一

    异常信息

    java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory

    原因及解决方法

    缺少commons-fileupload-x.x.x.jar文件。目前(2016年9月06日)最新版本是1.3.2。

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.2</version>
    </dependency>
    

    问题二

    异常信息:
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
        org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    
    原因及解决方法:

    配置MultipartResolver时未添加添加id属性或者id属性的值不是multipartResolver

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8" />
        <property name="maxUploadSize" value="5242880" />
    </bean>
    
  • 相关阅读:
    3组Alpha冲刺5/6
    3组Beta冲刺4/5
    3组Alpha冲刺6/6
    3组Beta冲刺2/5
    3组Beta冲刺3/5
    delegate Demo (一个关于System.Timers.Timer的Demo)
    System.Web.HttpException 与 HTTP Error 404.13 Not Found问题解决说明
    常用SQL关于表的操作
    设计模式学习笔记:单例模式
    JS 实践杂记
  • 原文地址:https://www.cnblogs.com/longying2008/p/5855289.html
Copyright © 2011-2022 走看看