【代码解析】代码解析之文件下载(1)

本文详细解析了瑞吉外卖项目中的一个文件下载方法,通过分析代码展示了如何使用FileInputStream读取文件内容,并通过ServletOutputStream将数据写入HTTP响应。重点涉及异常处理和流操作。
摘要由CSDN通过智能技术生成

代码解析之文件上传(1)

https://blog.csdn.net/m0_67930426/article/details/135386842?spm=1001.2014.3001.5501

该篇文章主要解析的是来自于瑞吉外卖的一段文件上传代码 

本篇文章解析的也是来自瑞吉外卖的一段代码,该代码写的是文件下载方法

@GetMapping("/download")
    public R<String> download(String name, HttpServletResponse response){
        //获取输入流对象
        try {
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

            //创建输出流
            ServletOutputStream outputStream = response.getOutputStream();

            byte[] bytes = new byte[1024];
            int len = -1;
            while((len=fileInputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }

            outputStream.close();
            fileInputStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }



        return R.success("接收成功");
    }
}

 相关代码解析如下:

1.
    public R<String> download(String name, HttpServletResponse response){

这行代码定义了一个名为 download 的方法,它接受两个参数,一个是文件名( name ),一个是用于响应的 HttpServletResponse 对象。返回值是 R<String > 类型。

2.    
        try {

开始一个try 块,用于捕获可能发生的异常

3.
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));

创建一个 FileInputStream 对象,用于指定路径读取文件,basePath + name 来自于上文,文件上传,指定文件存放的目录。

 4.
            ServletOutputStream outputStream = response.getOutputStream();

读取 HttpServletResponse 对象的输出流,用于将文件数据写入响应。

5.

   byte[] bytes = new byte[1024];

创建一个字节数组,用于存储从文件中读取的数据。

6.
            int len = -1;

声明一个整数变量len,并且初始化为-1,这个变量作用于存储从文件中读取的字节数。

7.
            while((len=fileInputStream.read(bytes))!=-1){

循环从文件中读取数据,直到文件末尾

8.

  outputStream.write(bytes,0,len);

将从文件中读取的数据写入响应流,bytes 是字节数组,0是起始位置,len 是要写入的字节数(实际读取的字节数)

9.
                outputStream.flush();

刷新输出流,确保所有数据都已写入响应。


            }

结束循环

10.

  outputStream.close();

关闭输出流

11.
            fileInputStream.close();

关闭文件输入流

12.
        } catch (FileNotFoundException e) {

如果在try块中发生FileNotFoundException ,则执行 catch 块

13.
            e.printStackTrace();

打印异常的堆栈跟踪

14.
        } catch (IOException e) {

如果在 try 块中发生 IOException 异常,则执行 catch 块。

15.
            e.printStackTrace();

}

打印异常的堆栈跟踪
 

16. 

        return R.success("接收成功");
    }
}

方法返回一个成功的响应,其中包含消息“ 接收成功”,这表明文件成功下载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值