• 文件的上传和下载


    1.文件的下载

    ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文使用ResponseEntity实现下载文件的功能

    在resources目录下创建目录并添加图片文件

    在index的页面文件中添加一个超链接

     

    在java目录下创建一个控制层的类 

    在该方法中添加相应的方法 

    package com.springMVC.controller;
    
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpSession;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.UUID;
    
    /*
    * ResponseEntity:可以作为控制器方法的返回值,表示响应到浏览器的完整的响应报文
    *
    *
    * */
    
    @Controller
    public class FileUpAndDownController {
        @RequestMapping("/test/down")
        public ResponseEntity testResponseEntity(HttpSession session) throws IOException {
            //获取ServletContext对象
            ServletContext servletContext = session.getServletContext();
            //获取服务器中文件的真实路径
            String realPath = servletContext.getRealPath("img");
            realPath = realPath + File.separator + "feiji.png";
            
            //创建输入流
            FileInputStream is = new FileInputStream(realPath);
            //创建字节数组,is.available()获取输入流所对应文件的字节数
            byte[] bytes = new byte[is.available()];
            //将流读到字节数组中
            is.read(bytes);
            //创建HttpHeaders对象设置响应头信息
            MultiValueMap headers = new HttpHeaders();
            //设置要下载方式以及下载文件的名字
            headers.add("Content-Disposition","attachment;filename=feiji.png");
            //设置响应状态码
            HttpStatus httpStatus = HttpStatus.OK;
            //创建ResponseEntity对象
            ResponseEntity responseEntity =new ResponseEntity(bytes,headers,httpStatus);
            //关闭输入流
            is.close();
            return  responseEntity;
        }
    
        @RequestMapping("/test/up")
        public String testUp(MultipartFile photo, HttpSession session) throws IOException {
            //1.获取上传文件的文件名
            String filename = photo.getOriginalFilename();
    
            //获取上传文件的后缀名
            String substring = filename.substring(filename.lastIndexOf("."));
            //获取uuid
            String uuid = UUID.randomUUID().toString();
            //拼接一个新的文件名
            filename = uuid +substring;
    
            //2.获取ServletContext对象
            ServletContext servletContext = session.getServletContext();
            //3.获取当前工程下photo目录的真实路径
            String photoPath = servletContext.getRealPath("photo");
            //4.创建photoPath所对应的File对象
            File file = new File(photoPath);
            //5.判断file所对应的目录是否存在
            if (!file.exists()){
                file.mkdir();
            }
            //6.传入到哪里
            String finalPath = photoPath + File.separator + filename;
            //7.上传文件
            photo.transferTo(new File(finalPath));
            return "success";
    
        }
        
    }
    

    运行程序如下所示: 

     2.文件的上传

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

    在index中创建表单

    在pom.xml文件中添加相关依赖 

    在springMVC的配置文件中设置文件上传解析器 

    在控制层的类中添加相应的方法

    运行程序如下所示: 

    点击提交如下所示: 

     

     3.解决文件上传过程中文重名的问题

    在上一个控制层的类中的方法代码的步骤1到步骤2之间添加如下所示

    运行结果如下所示: 

     

  • 相关阅读:
    图深度学习_简介
    数学建模Matlab之检验与相关性分析
    算法每日一题(反转单链表)C语言版
    【JVM】触发 Full GC 的条件
    Java项目:ssm图书商城系统
    Node.js开发、CommondJS 、ES-Module模块化设计
    【蓝桥杯选拔赛真题31】python演讲比赛打分 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
    自动化测试的定位及一些思考
    1021 Deepest Root
    ASP.NET内置对象
  • 原文地址:https://blog.csdn.net/weixin_46065214/article/details/127419843