pringMVC入门到实战------十、文件上传和下载

简介: 这篇文章详细介绍了SpringMVC中文件上传和下载的实现方法,包括文件下载的完整代码示例和文件上传所需的依赖添加、配置文件设置以及控制器方法的实现,同时提供了文件上传处理过程中的文件重命名和存储路径设置示例。

该文对纯小白不友好

1、文件下载

<a th:href="@{/testDown}">下载</a>
    /**
     * 测试下载
     * @param session
     * @return
     * @throws IOException
     */
    @RequestMapping("/testDown")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("/static/img/1.jpg");
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组
        byte[] bytes = new byte[is.available()];
        //将流读到字节数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }

测试结果

2、文件上传

文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"
SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

  • 添加依赖
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
  • 在SpringMVC的配置文件中添加配置:
<!--必须通过文件解析器的解析才能将文件转换为MultipartFile对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
  • 控制器方法:

这里对存储的文件名进行了处理、存储地址可以自定义

    /**
     * 测试上传
     * @param photo
     * @param session
     * @return
     * @throws IOException
     */
    @RequestMapping("/testUp")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //获取上传的文件的文件名
        String fileName = photo.getOriginalFilename();
        //处理文件重名问题
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        fileName = UUID.randomUUID().toString() + hzName;
        //获取服务器中photo目录的路径
        ServletContext servletContext = session.getServletContext();
        String photoPath = servletContext.getRealPath("photo");
        System.out.println(photoPath);
        File file = new File(photoPath);
        if(!file.exists()){
            file.mkdir();
        }
        String finalPath = photoPath + File.separator + fileName;
        //实现上传功能
        photo.transferTo(new File(finalPath));
        return "success";
    }

测试效果
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关文章
|
6月前
|
JavaScript 数据安全/隐私保护 Android开发
AutoJs4.1.0实战教程---源码大放送
AutoJs4.1.0实战教程---源码大放送
100 0
|
5月前
|
存储 Java Maven
大事件后端项目31--------文件上传_阿里云OSS_入门程序
大事件后端项目31--------文件上传_阿里云OSS_入门程序
|
存储 前端开发 程序员
Day05:Gin框架快速入门04 文件上传和下载| 青训营
Day05:Gin框架快速入门04 文件上传和下载| 青训营
|
中间件 Go API
Gin文件上传与下载 | 青训营笔记
Gin文件上传与下载 | 青训营笔记
731 0
|
缓存 Java Spring
深入springMVC源码------文件上传源码解析(下篇)
深入springMVC源码------文件上传源码解析(下篇)
|
前端开发 Java Apache
深入springMVC------文件上传源码解析(上篇)
深入springMVC------文件上传源码解析(上篇)
|
开发者 Windows Python
文件下载案例 | 学习笔记
快速学习 文件下载案例
115 0
文件下载案例 | 学习笔记
|
缓存 前端开发
前端下载并生成文件
前端下载并生成文件
|
XML JSON 中间件
Gin第三天---关于文件上传
Gin第三天---关于文件上传
228 0
Gin第三天---关于文件上传
下一篇
无影云桌面