springmvc上传文件方法及注意事项

855 阅读1分钟

springmvc为我们提供两种上传方式配置:

  1. org.springframework.web.multipart.commons.CommonsMultipartResolver (基于commons-fileupload.jar)
  1. org.springframework.web.multipart.support.StandardServletMultipartResolver (基于servlet3.0+)
二。配置方式基于commons-fileupload.jar
1)在先前的类DispacherConfig里添加如下代码:了解springcloud架构可以加求求:三五三六二四七二五九

/**
     * 此处注意bean的名字一定起名为multipartResolver
     * @return
     */
    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
        commonsMultipartResolver.setDefaultEncoding(propertyConfig.getUploadDefaultEncoding());
        commonsMultipartResolver.setMaxUploadSize(1024 * 1024 * propertyConfig.getMaxUploadSize());//字节为单位
        return commonsMultipartResolver;
    }

注意bean的名字一定为:multipartResolver,贼恶心,曾经起别的名字死活报错
2)在先前的application.properties添加如下代码:

#注意以兆为单位
spring.web.max.upload.size=30 
spring.web.fileupload.encoding=utf-8

3)更改propertyConfig类添加对应的属性:

 @Value("${spring.web.max.upload.size}")
    private Integer maxUploadSize;

    @Value("${spring.web.fileupload.encoding}")
    private String uploadDefaultEncoding="utf-8";

    public String getUploadDefaultEncoding() {
        return uploadDefaultEncoding;
    }

    public Integer getMaxUploadSize() {
        return maxUploadSize;
    }

在DispacherConfig里添加如下bean

1@Bean
2     public MultipartResolver multipartResolver() {
3         StandardServletMultipartResolver standardServletMultipartResolver = new StandardServletMultipartResolver();
4         return standardServletMultipartResolver;
5     }

注意bean的名字一定为:multipartResolver

如果您想通过配置实现,则需在web.xml里配置代码:

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <file-size-threshold>0</file-size-threshold>
            <location>c:/tmp</location>
            <max-file-size>2000000</max-file-size>
            <max-request-size>40000000</max-request-size>
        </multipart-config>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

同样需要在spring-bean里的配置:

<bean id="multipartResolver"
2         class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
3 </bean>

在controller中实现文件上传

创建控制器UploadController并写相关上传代码:

@PostMapping("/upload")
    public String upload(@RequestParam(name = "file")MultipartFile file) throws IOException {
        System.out.println(file.getOriginalFilename());//获取文件名
        FilenameUtils.getExtension(file.getOriginalFilename());//获取文件类型
        /*
            省略拼接文件地址代码 
            。。。
         */
        file.transferTo(new File("上传目标文件地址"));
        
        return "uploadSuccess";
    }