使用Spring MVC 实现文件上传遇到的问题以及解决方案

我使用的是IntelliJ IDEA开发工具、 Tomcatv7.0.82

创建一个Spring MVC项目 步骤如下:

这里写图片描述

只需要静静地等待依赖包的下载即可….

为项目进行一些初始配置:

  • 配置web.xml的内容:
<!--配置为 / 这样action后面可以直接接@RequestMapping里面的url-->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<!--配置为UTF-8-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 配置applicationContext.xml的内容:

<!-- 注解驱动:作用:替我们自动配置最新版的注解的处理器映射器和处理器适配器-->
<mvc:annotation-driven>
    <!--解决返回字符串乱码问题-->
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg value="UTF-8" />
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

<!--配置 @Controller 扫描 base-package 填写你写的Controller的包-->
<context:component-scan base-package="com.azhon.controller" />

<!-- 上传文件的设置 ,maxUploadSize=-1 表示无穷大 -->
<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="-1" />
</bean>
  • 同时需要在< beans>的节点上添加如下内容:
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"

文件上传我们还需要添加必要的jar:

这里写图片描述

当然我这里还用到了一个javax.servlet-api-4.0.0.jar

将jar拷贝至项目的libs目录下 右键 Add AS Library

下载地址:直接在这里搜索即可:http://mvnrepository.com

当我编译的时候出现了一个错误,导致项目无法启动:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'multipartResolver': 
Failed to introspect bean class [org.springframework.web.multipart.commons.CommonsMultipartResolver] for 
lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory

Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.getDeclaredMethods(Class.java:1975)
    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:613)
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524)
    at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:247)
    ... 59 more

原来是没有将commons-fileupload-1.3.2.jarcommons-io-1.3.2.jar 添加到 artifacts(.war)。解决方法如下:

这里写图片描述

打开project structrue–>project settings–>artifacts 点击右下角的 Fix即可

最后一步了,编写一个Controller进行文件上传

@Controller
public class UploadFileController {
    /**
     * 指定url到请求方法的映射
     */
    @RequestMapping("/add_file")
    @ResponseBody
    public String addFile(MultipartFile file, HttpSession session) {
        String filename = file.getOriginalFilename();
        String realPath = session.getServletContext().getRealPath("/WEB-INF/upload");
        File newFile = new File(realPath, filename);
        if (!newFile.exists()) {
            newFile.mkdirs();
        }
        try {
            file.transferTo(newFile);
        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败";
        }
        return "上传成功";
    }
}

编写index.jspfrom表单调用文件上传接口

<body>
    ****上传文件****
    <form action="add_file" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="file" style="text-align:center;">
        <input type="submit"/>
    </form>
</body>

大功告成 拿Demo去玩吧:http://download.csdn.net/download/a_zhon/10123541

猜你喜欢

转载自blog.csdn.net/a_zhon/article/details/78566149