自存,关于response

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为附件形式打开,这样只要是文件都会走下载

这些都是文件的下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值