欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kite的学习历程之SpringMVC文件上传

程序员文章站 2022-06-06 14:42:15
...

Kite学习框架的第十三天

这里我会先介绍基本的文件上传,在介绍SpringMVC文件上传
前提:
在pom.xml中导入相应的依赖

<!--文件上传依赖-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
  </dependencies>

1.基础的文件上传

1.1 先创建一个jsp页面添加文件上传页面

创建时注意: form标签method使用post,还需要设定属性enctype为multipart/form-data
当 form 表单的 enctype 取值为 Mutilpart/form-data 时,请求正文内容就变成: 每一部分都是 MIME 类型描述的正文 ;默认的取值为,request.getParameter(),如果为这个取值,则不能进行文件上传


<%--
  Created by IntelliJ IDEA.
  User: 小风筝
  Date: 2020/6/19
  Time: 16:13
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<body>


    <h3>文件上传</h3>
    <%--enctype="multipart/form-data" :将表单分为不同部分,进行上传--%>
    传统的文件上传方式<br/>
    <form action="user/fileUpLoad1" method="post" enctype="multipart/form-data">

        选择文件<input type="file" value="浏览" name="upload"/><br/>
        <input type="submit" value="文件上传"/>
    </form>
    
</body>
</html>

1.2 创建一个控制类

  1. 创建一个接收文件的文件夹
  2. 先获取request对象,在通过解析request对象获取文件内容,
package cn.kitey.controller;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * 文件上传控制类
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/fileUpLoad1")
    public String fileUpLoad1(HttpServletRequest request)  {
        System.out.println("基本的文件上传了!");
        //使用fileupload组件完成文件上传
        //创建文件上传存储位置
        String path ="D:\\java\\mybatis-spring-springmvc\\SpringMvcSource\\uploads\\";
        //判断该路径下是否存在该文件,如果不存在进行创建
        File file = new File(path);
        if(!file.exists()){
            //创建该文件夹
            file.mkdirs();
        }

        //解析request对象,获取上传对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        //解析request
        List<FileItem> fileItems = null;
        try {
            fileItems = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        //对获取的对象进行遍历
        for (FileItem fileItem : fileItems) {
            //进行判断,当前的item对象是否事上传文件项
            if(fileItem.isFormField()){
                //表单项
            }else {
                //文件项
                //获取文件上传的名称
                String filename = fileItem.getName();
                //完成文件上传
                try {
                    fileItem.write(new File(path,filename));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //删除缓存文件
                fileItem.delete();
            }
        }

        System.out.println(path);
        return "success";
    }

}


这时可以启动服务器进行文件上传

2. 基于SpringMVC的文件上传

2.1 在index.jsp中添加SpringMVC文件上传的form标签

 基于SpringMVC 的文件上方式 <br/>
    <form action="user/fileUpLoad2" method="post" enctype="multipart/form-data">
        <%--这里的name必须为upload--%>
        选择文件<input type="file" value="浏览" name="upload"/><br/>
        <input type="submit" value="文件上传"/>
    </form>

2.2 在视图控制类添加springMVC文件上传的控制方法

  1. 这里我们需要获取MultipartFile对象,这个对象中SpringMVC已经将文件进行了提取
  2. 使用该对象的transferTo方法将文件写入文件夹
  3. 这里我获取了当前的时间对文件进行可命名,让上传的文件名不冲突

    /**
     * 使用SpringMVC上传文件
     * @param request
     * @param upload
     * @return
     */
    @RequestMapping("/fileUpLoad2")
    public String fileUpLoad2(HttpServletRequest request, MultipartFile upload)  {
        System.out.println("SpringMVC文件上传了!");
        //使用fileupload组件完成文件上传
        //创建文件上传存储位置
        String path ="D:\\java\\mybatis-spring-springmvc\\SpringMvcSource\\uploads\\";
        //判断该路径下是否存在该文件,如果不存在进行创建
        File file = new File(path);
        if(!file.exists()){
            //创建该文件夹
            file.mkdirs();
        }
        //获取文件上传名称
        String filename = upload.getOriginalFilename();
        long newTime = System.currentTimeMillis();
        //重新定义文件名
        filename = newTime+filename;
        //完成文件上传
        try {
            upload.transferTo(new File(path,filename));
        } catch (IOException e) {
            e.printStackTrace();
        }


        System.out.println(path);
        return "success";
    }



2.3 在springMVC中配置文件解析器

注意注意注意 重要的事说三遍这里定义的class的一定要为multipartResolver
这样文件解析器才可以进行解析

 <!--
        配置文件解析器
            注意这里的id值不惜为multipartResolver
    -->
    <bean id ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--更上传文件的最大值(这里定义为10M)-->
        <property name="maxUploadSize" value="10485760"></property>
    </bean>

这时我们可以进行服务器运行了
index.jsp页面
Kite的学习历程之SpringMVC文件上传

文件上传成功跳转页面
Kite的学习历程之SpringMVC文件上传
文件夹产生文件截图

Kite的学习历程之SpringMVC文件上传

以上就是文件上传的基本内容了加油