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

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文件上传_第1张图片

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

Kite的学习历程之SpringMVC文件上传_第3张图片

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

你可能感兴趣的:(每天的学习笔记)