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

发布时间:2024年01月04日

代码解析之文件上传(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("接收成功");
? ? }
}

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

文章来源:https://blog.csdn.net/m0_67930426/article/details/135388688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。