SpringBoot之文件上传下载

1 文件上传

1.1上传单个文件

在webapp目录下创建如图所示的文件夹:在这里插入图片描述
1.编写fileLoad.jsp的代码如下:

<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
    <title>文件上传</title>
    <meta charset="UTF-8">
</head>
<body>
    <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
       请选择文件: <input type="file" name="multipartFile"/>
        <input type="submit" value="上传"/>
    </form>
</body>
</html>

如图所示:在这里插入图片描述
2.编写FileController的代码如下:

package com.txw.controller;

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.util.UUID;
/**
 * 文件控制器
 * @author Adair
 * E-mail: [email protected]
 */
@SuppressWarnings("all")  // 注解警告信息
@Controller
@RequestMapping("/file")
public class FileController {
    
    

    @RequestMapping("/upload")
    public String upload(MultipartFile multipartFile, HttpServletRequest request) throws Exception {
    
    
       // 通过相对路径方式获取项目部署到服务器的绝对路径
        String realPath = request.getRealPath("/upload");
        // 设置文件名为:uuid+原始文件后缀
        int i = multipartFile.getOriginalFilename().lastIndexOf(".");
        String substring = multipartFile.getOriginalFilename().substring(i);
        String newFileName = UUID.randomUUID().toString().replace("-","") + substring;
        // 文件上传
        multipartFile.transferTo(new File(realPath,newFileName));
        return "index";
    }
}

如图所示:
在这里插入图片描述

1.2 上传多个文件

1.编写fileLoad.jsp的代码如下:

<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
    <title>文件上传</title>
    <meta charset="UTF-8">
</head>
<body>
    <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
        请选择正面文件: <input type="file" name="multipartFiles"/></br>
       请选择背面文件: <input type="file" name="multipartFiles"/></br>
       请选择站立文件: <input type="file" name="multipartFiles"/></br>
        <input type="submit" value="上传"/>
    </form>
</body>
</html>

如图所示在这里插入图片描述
2.编写FileController的代码如下:

package com.txw.controller;

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.util.UUID;
/**
 * 文件控制器
 * @author Adair
 * E-mail: [email protected]
 */
@SuppressWarnings("all")  // 注解警告信息
@Controller
@RequestMapping("/file")
public class FileController {
    
    

    @RequestMapping("/upload")
    public String upload(MultipartFile[] multipartFiles, HttpServletRequest request) throws Exception {
    
    
        for (MultipartFile multipartFile : multipartFiles) {
    
    
            if (multipartFile.getSize() != 0){
    
    
                // 通过相对路径方式获取项目部署到服务器的绝对路径
                String realPath = request.getRealPath("/upload");
                // 设置文件名为:uuid+原始文件后缀
                int i = multipartFile.getOriginalFilename().lastIndexOf(".");
                String substring = multipartFile.getOriginalFilename().substring(i);
                String newFileName = UUID.randomUUID().toString().replace("-","") + substring;
                // 文件上传
                multipartFile.transferTo(new File(realPath,newFileName));
            }
        }
        return "index";
    }
}

如图所示:在这里插入图片描述
3.在application.properties添加的代码如下:

#设置文件上传的 文件大小限制
spring.servlet.multipart.max-file-size=200MB
spring.servlet.multipart.max-request-size=200MB
#开启jsp页面的调试模式
server.servlet.jsp.init-parameters.development=true

如图所示:在这里插入图片描述
总结,如图所示:在这里插入图片描述

2 文件下载

在webapp目录下创建如图所示的文件夹:在这里插入图片描述
1.编写downLoad.jsp的代码如下:

<%@page pageEncoding="UTF-8" contentType="text/html; UTF-8" isELIgnored="false" %>
<html>
<head>
    <title>文件下载</title>
    <meta charset="UTF-8">
</head>
<body>
    <a href="${pageContext.request.contextPath}/file/download?fileName=a.git">a.git</a><br/>
    <a href="${pageContext.request.contextPath}/file/download?fileName=aa.txt">aa.txt</a><br/>
</body>
</html>

如图所示:在这里插入图片描述
2.编写FileController的代码如下:

    /**
     * 文件下载
     * @param fileName
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping("/download")
    public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    
        // 文件下载
        String realPath = request.getRealPath("/download");
        // 将服务器的文件读取到系统中
        FileInputStream is = new FileInputStream(new File(realPath, fileName));
        // 获取响应输出流
        ServletOutputStream os = response.getOutputStream();
        // 设置文件下载的方式 以及下载后的文件名 响应输出流编码
        response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));
        // 交换数据
        IOUtils.copy(is,os);
        // 关闭资源
        IOUtils.closeQuietly(is);
        IOUtils.closeQuietly(os);
    }

如图所示:在这里插入图片描述
总结,如图所示:在这里插入图片描述

3 SpringBoot中的 拦截器

1.编写MyInterceptor的代码如下:

package com.txw.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 自定义拦截器
 * @author Adair
 * E-mail: [email protected]
 */
@SuppressWarnings("all")   // 注解警告信息
public class MyInterceptor implements HandlerInterceptor {
    
    

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        System.out.println("----------1----------");
        // 返回true 放行  返回false阻止
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
        System.out.println("----------3----------");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    
        System.out.println("----------4----------");
    }
}

如图所示:在这里插入图片描述
2.编写InterceptorConfig的代码如下:

package com.txw.config;

import com.txw.interceptor.MyInterceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * 拦截器的配置类
 * @author Adair
 * E-mail: [email protected]
 */
@Component
@SuppressWarnings("all")  // 注解警告信息
public class InterceptorConfig implements WebMvcConfigurer {
    
    

    /**
     *  用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    
    
        //添加那个拦截器
        registry.addInterceptor(new MyInterceptor())
                // 拦截所有控制器请求
                .addPathPatterns("/test/*")
                // 排除指定的请求
                .excludePathPatterns("/test/test2");
    }
}

如图所示:在这里插入图片描述
3.编写的代码如下:

package com.txw.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * @author Adair
 * E-mail: [email protected]
 */
@Controller
@RequestMapping("test")
public class TestController {
    
    

    @RequestMapping("test1")
    public String test1(){
    
    
        System.out.println("----------2----------");
        return "index";
    }

    @RequestMapping("test2")
    public String test2(){
    
    
        System.out.println("----------2----------");
        return "index";
    }
}

如图所示:在这里插入图片描述

4 war包部署

1.设置打包方式为war的代码如下:

<packaging>war</packaging>

如图所示:在这里插入图片描述
2. 在插件中指定入口类的代码如下:

 <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!--使用热部署出现中文乱码解决方案-->
        <configuration>
          <fork>true</fork>
          <!--增加jvm参数-->
          <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
          <!--指定入口类-->
          <mainClass>com.txw.SpringBoot02Application</mainClass>
        </configuration>
      </plugin>
    </plugins>

如图所示:
在这里插入图片描述
3.排除内嵌的tomcat的代码如下:

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <!--去掉内嵌tomcat-->
      <scope>provided</scope>
    </dependency>
    <!--springboot解析jsp相关依赖-->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <!--去掉使用内嵌tomcat解析jsp
      provided:全程生效 编译 测试 打包不会存在 容器提供
      -->
      <scope>provided</scope>

如图所示:在这里插入图片描述
6.编写的代码如下:

package com.txw;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
 * 主启动类
 * 一旦使用war包部署注意:
 * 	1. application.yml 中配置port context-path 失效
 * 	2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
 * @author Adair
 * E-mail: [email protected]
 */
@MapperScan("com.txw.dao")   // 必须在入口类中加入这个配置
@SpringBootApplication
public class SpringBoot02Application extends SpringBootServletInitializer {
    
    
   /* public static void main(String[] args) {
        SpringApplication.run(SpringBoot02Application.class,args);
    }*/

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    
    
        return builder.sources(SpringBoot02Application.class);
    }
}

如图所示:在这里插入图片描述
7.如图所示:说明打包成功!
在这里插入图片描述
8.这时在target目录下生成war,成功!在这里插入图片描述
9.把springboot_02.war拷贝到Tomcat的webapps的目录下,如图所示:在这里插入图片描述
10.启动Tomcat服务器,如图所示:说明启动成功!在这里插入图片描述
通过浏览器访问:http://localhost:8080/springboot_02/fileLoad.jsp,如图所示:说明部署成功!在这里插入图片描述总结,如图所示:在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_40055163/article/details/121161309