Java http Post下载Excel文件 xxx.xlsx 失败解决,及传输文件类型ContentType对应关系

简介: 查询数据库生成Excel下载功能。本来很简单的功能却搞了挺久的,主要因为下载的文件打不开,且此功能已是基本功能。这里记录下来方便后面查阅。ContentType对应的文件关系查看下面连接https://www.runoob.com/http/mime-types.html

1、后端代码spring cloud项目

@RequestMapping("/printexcel")
@ResponseBody
public void printSaleInvoiceToExcel( HttpServletResponse response) throws ParseException {
    // 查询数据,生成Excel返回byte数组
    byte[] databyte = saleInvoiceCustomsExcelService.saleInvoiceExportExcel(new Context());
    OutputStream out = null;
    try {
                  //重点:要写对类型,要不然下载文件打不开
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        out = response.getOutputStream();
        out.write(databyte);
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        try {
            if(out!=null) out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2、nuxt vue前端写法,后面有时间再优化改进
var _this = this;

  var query = _this.query;
  _this.loadingFlag = true;
  _this.$axios.post("/printexcel", { query: query }, { responseType: "arraybuffer" }).then((result) => {
      var blob = new Blob([result], {
        type: "application/vnd.ms-excel;charset=utf-8"
      });
      var downloadElement = document.createElement("a");
      var href = window.URL.createObjectURL(blob); //创建下载的链接
      downloadElement.style.display = "none";
      downloadElement.href = href;
      downloadElement.download = "allProcurementPlanInfo.xlsx"; //下载后文件名
      document.body.appendChild(downloadElement);
      downloadElement.click(); //点击下载
      document.body.removeChild(downloadElement); //下载完成移除元素
      window.URL.revokeObjectURL(href); //释放掉blob对象
      _this.loadingFlag = false;
    }).catch(() => {
      this.$message({
        type: 'info',
        message: 'download canceled'  
      });
      _this.loadingFlag = false;
    });

3、对照部分截图
详情看下面的连接,暂时没有时间去找官网
https://www.runoob.com/http/mime-types.html
image.png

参考文章:https://blog.csdn.net/qweasdassd/article/details/122553718

相关文章
|
1月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
343 2
|
2月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
|
2月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
178 0
|
2月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
186 14
|
3月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
201 18
|
3月前
|
存储 缓存 前端开发
http协议调试代理工具,Fiddler免费版下载,抓包工具使用教程
Fiddler是一款功能强大的HTTP协议调试代理工具,能记录并检查电脑与互联网间的HTTP通信,支持断点设置和数据编辑。相比其他网络调试器,Fiddler操作更简单且用户友好,支持查看Cookie、HTML、JS、CSS等文件内容。它还具备HTTPS抓包、过滤设置、统计页面总重量等功能,适用于安全测试与功能测试。通过插件扩展,用户可自定义视图或分析缓存行为。支持多种HTTP请求方法(如GET、POST等)及状态码分类(1xx-5xx),是开发者调试网络请求的得力工具。同类工具有HttpWatch、Firebug、Wireshark等。
383 1
|
Java
JAVA读取文件的几种方法
喜欢的朋友可以关注下,粉丝也缺。 InputStreamReader+BufferedReader读取字符串 InputStreamReader 将字节流转换为字符流。
1349 0
[Java]读取文件方法大全
1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
766 0
|
Java Windows 移动开发
[Java]读取文件方法大全
1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容 4、随机读取文件内容  public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
750 0

热门文章

最新文章