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";
    }

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

在这里插入图片描述

相关文章
|
网络协议
|
7月前
|
存储 Java Maven
大事件后端项目31--------文件上传_阿里云OSS_入门程序
大事件后端项目31--------文件上传_阿里云OSS_入门程序
|
缓存 Java Spring
深入springMVC源码------文件上传源码解析(下篇)
深入springMVC源码------文件上传源码解析(下篇)
136 0
|
前端开发 Java Apache
深入springMVC------文件上传源码解析(上篇)
深入springMVC------文件上传源码解析(上篇)
120 0
|
编解码 前端开发 API
阿里云视频上传实战
最近在做项目优化,关于阿里云视频上传方面一直存在视频上传过慢问题.由于之前采用的是服务端进行视频上传,主要的逻辑是客户端上传视频到服务端进行视频文件暂存,然后服务端上传视频到阿里云.
阿里云视频上传实战
|
开发者 Windows Python
文件下载案例 | 学习笔记
快速学习 文件下载案例
123 0
文件下载案例 | 学习笔记
|
缓存 前端开发
前端下载并生成文件
前端下载并生成文件
|
缓存 安全 JavaScript
如何实现上传文件到 nodejs 和文件下载
最近拿 next.js 做个全栈项目,需要文件上传和下载,这里记录下实现方式,也写一下使用原生 node 代码如何实现。
|
编解码 网络协议 Java
【实战-干货】手把手带你搭建自己的FTP服务器,实现文件上传、下载
【实战-干货】手把手带你搭建自己的FTP服务器,实现文件上传、下载
2364 0
【实战-干货】手把手带你搭建自己的FTP服务器,实现文件上传、下载
html+css实战35-上传多个文件功能
html+css实战35-上传多个文件功能
129 0
html+css实战35-上传多个文件功能