代码解析之文件上传(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("接收成功");
}
}
方法返回一个成功的响应,其中包含消息“ 接收成功”,这表明文件成功下载。