首页 > 其他分享 >学习笔记——SpringMVC文件上传与下载

学习笔记——SpringMVC文件上传与下载

时间:2023-01-21 19:11:28浏览次数:42  
标签:文件 String SpringMVC 笔记 filename File new 上传

2023-01-21

一、文件下载

1、实现文件下载步骤

(1)准备文件下载相关步骤

(2)将ResponseEntity<T>对象,作为方法返回值

(3)为ResponseEntity<T>对象,设置三个参数

 2、示例代码

@RequestMapping("/fileDownloadController")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request,String filename){

        ResponseEntity<byte[]> responseEntity = null;

        try {
            //获取文件位置
            //获取文件真实路径【(request|session)->ServletContext】
            String realPath = request.getServletContext().getRealPath("/WEB-INF/download/" + filename);
            //输入流
            InputStream is = new FileInputStream(realPath);
            //文件下载
            byte[] bytes = new byte[is.available()];
            is.read(bytes);
            //设置响应头
            HttpHeaders headers = new HttpHeaders();
            //设置要下载的文件的名字(及文件格式为附件格式,通知服务器下载当前资源,而不是打开)
            headers.add("Content-Disposition","attachment;filename");
            //处理中文文件名问题
            headers.setContentDispositionFormData("attachment",new String(filename));
            //状态码
            responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return responseEntity;
    }

二、文件上传

1、实现文件上传思路

(1)准备工作

①准备文件上传页面

表单的提交方式必须为POST

设置表单enctype属性值为multipart/form-data

表单中包含文件域(type=file)

②导入jar包

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

③装配解析器:CommonsMultipartResolver

<!--    装配CommonsMultipartResolver-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--        设置字符集-->
        <property name="defaultEncoding" value="utf-8"></property>
<!--        设置总文件的大小-->
        <property name="maxUploadSize" value="102400"></property>
    </bean>

(2)实现步骤

①将type=file(文件域)直接入参:MultipartFile类型即可

②获取文件名称

@Controller
public class FileUploadController {

    @RequestMapping("/fileUploadController")
    public String fileUploadController(String username,
                                       MultipartFile updateFile,
                                       HttpSession session){
        try {
            //获取文件名称
            String filename = updateFile.getOriginalFilename();
            //获取上传路径
            String realPath = session.getServletContext().getRealPath("/WEB-INF/upload");
            //判断上传路径是否存在(如不存在,创建)
            File filePath = new File(realPath);
            if(!filePath.exists()){
                filePath.mkdirs();
            }
            //实现文件上传
            //File.separator:是系统默认的分隔符
            File uFile = new File(filePath+File.separator+filename);
            updateFile.transferTo(uFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }
}

三、文件上传优化

1、允许同名文件上传

(1)使用UUID解决文件名重复问题

UUID是一个32位16进制随机数(特点:唯一性)

//实现文件上传
            //解决重复文件名上传的方式
            String uuid = UUID.randomUUID().toString().replace("-", "");
            //File.separator:是系统默认的分隔符
            File uFile = new File(filePath+File.separator+uuid+filename);

(2)使用时间戳解决文件名重复问题

System.currentTimeMillis()

2、设置上传文件大小上限

在装配CommonsMultipartResolver时,设置上传文件的上限

<!--    装配CommonsMultipartResolver-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--        设置字符集-->
        <property name="defaultEncoding" value="utf-8"></property>
<!--        设置总文件的大小-->
        <property name="maxUploadSize" value="102400"></property>
    </bean>

 

标签:文件,String,SpringMVC,笔记,filename,File,new,上传
From: https://www.cnblogs.com/isDaHua/p/17063495.html

相关文章

  • 笔记本打字延迟缓慢的解决办法
    (41条消息)笔记本打字延迟缓慢的解决办法_高欣的博客的博客-CSDN博客_笔记本打字延迟环境:1、dell笔记本2、Windows10专业版3、微软输入法,搜狗输入法Question:1、打字过......
  • 数学分析笔记【5】 数列极限
    数列与数列极限的定义定义5.1称函数\(f:\mathbb{N}^{+}\rightarrow\mathbb{R}\)为数列,写作小写字母与下标的形式,如\[a_1,a_2,a_3,\cdots,a_n\leftrightarrowf(1),f......
  • C++实战笔记(三)异常处理
    tags:C++Interview写在前面简单总结一下C++异常处理部分(Exception).异常只是C++为了处理错误提出的一种解决方案,并不是唯一的一种.异常处理特点异常处理的流程完全独立......
  • 计算几何笔记(一):点与向量
    开始之前圆周率constpi=acos(-1);浮点数的比较对实数进行浮点运算难免会出现精度误差为了控制精度,可以设置一个偏差值\(eps\)constdoubleeps=1e-5;intsgn(......
  • fabric学习笔记10
    fabric学习笔记1020201303张奕博2023.1.22测试实践1.启动网络命令:cdfabric-samples/chaincode-docker-devmode/docker-compose-fdocker-compose-simple.......
  • 读函数式编程思维笔记02_转变思维
    1. 命令式编程1.1. 按照“程序是一系列改变状态的命令”来建模的一种编程风格1.2. 传统的for循环1.2.1. 确立初始状态1.2.2. 每次迭代都执行循环体中的一系列命......
  • Foundations of Embedded IoT Systems 复习笔记 南安
    Communicationshub,border-routerorGatewaylinkslowpowerhardwaretotheoutsideworldNetworkWifi/EthernetLowPowerWideAreaNetworksLowpowerIPv6n......
  • ZYNQ学习笔记 程序固化
    ZYNQ程序的固化PS:本次实验基于zynq7010芯片,开发软件为vivado2018.3。​ zynq7010和其他的fpga板一样,日常我们开发时使用的JTAG调试下载进去的二进制文件断电后会丢失的......
  • 舞蹈链 (DLX, Dancing Links X) 算法笔记
    舞蹈链(DLX,DancingLinksX)算法精确覆盖问题在一个全集X中若干子集的集合为S,S的子集S*,满足X中的每一个元素在S*中恰好出现一次。通俗地讲,给定一个\(N\)行\(M\)......
  • 【python】Matplotlib库学习笔记
    Matplotlib是python的绘图库。以下内容主要介绍Matplotlib的子库pyplot。pyplot是常用的2D绘图模块,包含一系列绘图相关函数。plot()函数plot()函数可以用来绘制......