springboot 文件下载

server/2024/11/25 9:11:57/

springboot中,执行如下代码实现文件下载

java">    @GetMapping("/file/download/test")public void Download(HttpServletResponse response){try {String path = "XXXXXXXXXXXX";//文件路径File file = new File(path);// 读到流中InputStream inputStream = Files.newInputStream(Paths.get(path));// 文件的存放路径response.reset();response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));response.setContentLengthLong(file.length());ServletOutputStream outputStream = response.getOutputStream();byte[] b = new byte[1024];int len;//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1while ((len = inputStream.read(b)) > 0) {outputStream.write(b, 0, len);}inputStream.close();} catch (IOException e) {e.printStackTrace();}
}

访问地址,执行下载时,会出错:

No converter for [class cn.hutool.core.io.resource.InputStreamResource] with preset Content-Type 'application/octet-stream'

对于具有预设内容类型“application/octet流”的[class cn.hutool.core.io.resource.InputStreamResource],没有转换器

当然,在出现错误时,我在想是不是application/octet-stream的问题,也使用过multipart/form-data,但也是一样的结果。

application/octet-stream和multipart/form-data的区别:

 或者是这个错误:

org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。

 但是即使会报错,文件还是能完整的下载下来。

找了很久的解决方法,但是没有发现什么正确的答案。

这里贴出来一些别人的解答,供参考思考,本人试过但没成功:

Spring Boot 异常:HttpMessageNotWritableException: No Converter for [class ...] With Preset Content-Type - spring 中文网

No converter for XXX with preset Content-Type ‘application/octet-stream;charset=UTF-8‘_unkonwncontenttypeexception-CSDN博客

下载/导出问题(统一返回):No converter for xxx with preset Content-Type ‘application/octet-stream;charset=UTF-8-CSDN博客

这里给出帖主的解决方法:

既然这里访问文件能正确的完成下载,我们就让不进行异常操作:

java">    @GetMapping("/file/download/test")public void Download(HttpServletResponse response){try {String path = "XXXXXXXXXXXX";//文件路径File file = new File(path);// 读到流中InputStream inputStream = Files.newInputStream(Paths.get(path));// 文件的存放路径response.reset();response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));response.setContentLengthLong(file.length());ServletOutputStream outputStream = response.getOutputStream();byte[] b = new byte[1024];int len;//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1while ((len = inputStream.read(b)) > 0) {outputStream.write(b, 0, len);}inputStream.close();} catch (IOException e) {System.out.println("文件正在被下载");}
}


 


http://www.ppmy.cn/server/144759.html

相关文章

单体架构、集群架构和分布式架构概述

单体架构、集群架构和分布式架构概述 在现代系统架构和开发过程中,单体架构、集群架构和分布式架构是三个常见且关键的概念。 本文将详细介绍这些技术的相关概念,并探讨它们之间的联系与区别。 一、单体架构 单体架构,即单体技术&#xff…

初始背单词的方法:论冲泡一杯茶水来喝

背单词的方法有很多种,但最开始的时候,也就是对小朋友来说,可以从“冲泡一杯茶水来喝”这样一件事情来说,也就是打这样一个比方来论说或说明: 冲泡一杯茶水来喝 上面这句话,说白了,就是在说一…

Rust学习(八):异常处理和宏编程:

Rust学习(八):异常处理和宏系统 1、异常处理: 异常处理是任何编程语言都会遇到的现象,Rust并没有像其他变成语言一样提供了try catch这样的异常处理方法,而是提供了一种独特的异常处理机制。这里需要指明…

SAP 零售方案 CAR 系统的介绍与研究

前言 当今时代,零售业务是充满活力和活力的业务领域之一。每天,由于销售运营和客户行为,它都会生成大量数据。因此,公司迫切需要管理数据并从中检索见解。它将帮助公司朝着正确的方向发展他们的业务。 这就是为什么公司用来处理…

图形化界面MySQL(MySQL)(超级详细)

1.官网地址 MySQL :: Download MySQL Workbench 1.1在Linux直接点击NO thanks..... 下载完后是这个页面 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 进行连接 点击这个就运行了 只执行show tables;要先选中 圆圈处支持自己输入 点击这个就执…

小米xiaomi

文章目录 一、vector和list的区别?二、include 双引号和尖括号的区别?三、set的底层数据结构?四、set和multiset的区别?五、map和unordered_map的区别?六、虚函数和纯虚函数的区别?七、extern C有了解过吗&…

Image fusion meets deep learning: A survey and perspective译文

摘要 图像融合是指从不同的源图像中提取和组合最有意义的信息,旨在生成一个更有信息量和有利于后续应用的单图像。深度学习的发展极大地推动了图像融合的发展,而神经网络强大的特征提取和重建能力使融合结果充满希望。最近,几种最新的深度学…

flowable流程图详细绘制教程

文章目录 前言一、flowable是什么?回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西: 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…