response是返回给浏览器的数据,可以返回文件,图片文字字节,后端可以对response设置信息,就比如是让浏览器下载还是让浏览器展示,主要是图片,还是文件,一些文件没办法展示只能下载了
1.输出文字
//测试测试测试测试
@GetMapping("/get")
public void selectPath(HttpServletResponse response) throws IOException {
response.setHeader("content-type","text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.write("字节流");
}
response.setHeader("content-type","text/html;charset=utf-8");是让浏览器不会乱码
2.输出文件
//测试测试测试测试
@GetMapping("/get")
public void selectPath(HttpServletResponse response) throws IOException {
File file = new File("D:\\javakaifagongju\\封面\\148584b3b0ddcc1a41581e3a9932ef49\\屏幕截图 2024-08-23 103738.png");
byte[] bytesArray = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytesArray);
fis.close();
OutputStream os = response.getOutputStream();
os.write(bytesArray);
}
先把文件转成字节,然后output出去
如果是这样的话,浏览器会判断这个文件是什么文件,可不可以展示,个人测试下来图片,文件可以展示,然后压缩包展示不了,如果是图片(上述代码),那么就会展示
文件也一样
但有一些文件他是展示不了的,比如说zip压缩包或其他,那么他就会下载这个文件
这种下载是没有文件名字的,然后下载也没有下载进度
那么要如何然所有的文件都走下载而不是有的是下载有的是展示呢
//测试测试测试测试
@GetMapping("/get")
public void selectPath(HttpServletResponse response) throws IOException {
File file = new File("D:\\javakaifagongju\\封面\\148584b3b0ddcc1a41581e3a9932ef49\\屏幕截图 2024-08-23 103738.png");
String filename=file.getName();
byte[] bytesArray = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(bytesArray);
fis.close();
OutputStream os = response.getOutputStream();
//Content-Disposition的作用:告知浏览器以何种方式显示响应返回的文件,用浏览器打开还是以附件的形式下载到本地保存
//attachment表示以附件方式下载 inline表示在线打开 "Content-Disposition: inline; filename=文件名.mp3"
// filename表示文件的默认名称,因为网络传输只支持URL编码的相关支付,因此需要将文件名URL编码后进行传输,前端收到后需要反编码才能获取到真正的名称
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
// 告知浏览器文件的大小
response.addHeader("Content-Length", "" + file.length());
os.write(bytesArray);
}
请求头为Content-Disponsition attachment为附件形式打开,这样只要是文件都会走下载
这些都是文件的下载