首页 新闻 会员 周边

java 图片预览和下载setContentType对功能的影响问题

0
悬赏园豆:5 [已解决问题] 解决于 2023-02-02 16:32

Spring Boot版本 2.5.0

response.setContentType("image/*")的位置影响了下载和预览

放在获取读取文件流并赋值给putputStream之后是预览

    @ApiOperation("显示图片")
    @GetMapping("/showImage")
    public void getImg(HttpServletResponse response) throws IOException {
        response.reset();
        response.setCharacterEncoding("utf-8");

        ServletOutputStream outStream = response.getOutputStream(); 

        String path = "F:\\JC_T\\003W6jfdly1gtvkk0uzwuj68zh6qm7wl02.jpg";
        File file = new File(path);
        FileCopyUtils.copy(new FileInputStream(file), outStream);

        response.setContentType("image/*");

        outStream.flush();
        outStream.close();
    }

效果如图

放在获取读取文件流并赋值给putputStream之前是下载

  @ApiOperation("显示图片")
    @GetMapping("/showImage")
    public void getImg(HttpServletResponse response) throws IOException {
        response.reset();
        response.setCharacterEncoding("utf-8");

        ServletOutputStream outStream = response.getOutputStream(); //得到向客户端输出二进制数据的对象

        String path = "F:\\JC_T\\003W6jfdly1gtvkk0uzwuj68zh6qm7wl02.jpg";
        File file = new File(path);

        response.setContentType("image/*");

        FileCopyUtils.copy(new FileInputStream(file), outStream);


        outStream.flush();
        outStream.close();
    }

效果如图

有没有大佬能解释下

代码羡的主页 代码羡 | 初学一级 | 园豆:69
提问于:2022-12-07 16:39
< >
分享
最佳答案
0

在获取读取文件流并赋值给 putputStream 之前调用 response.setContentType("image/*"),浏览器就会将响应的内容视为下载文件,并弹出文件下载对话框供用户保存文件。

这种情况下,浏览器并不会在页面上直接预览响应的内容,而是弹出文件下载对话框让用户保存文件。

这是因为当浏览器接收到响应时,它会根据响应的内容类型来决定如何处理响应的内容。如果将响应的内容类型设置为图像,那么浏览器会将响应的内容视为图像,并尝试在页面上预览;如果将响应的内容类型设置为下载文件,那么浏览器会将响应的内容视为下载文件,并弹出文件下载对话框供用户保存文件。

因此,当你在获取读取文件流并赋值给 putputStream 之前调用 response.setContentType("image/*") 时,浏览器会将响应的内容视为下载文件,并弹出文件下载对话框供用户保存文件。

收获园豆:5
a1010 | 菜鸟二级 |园豆:301 | 2022-12-08 13:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册