向服务器发送JSON POST请求,接收二进制响应(一个Excel文件),如何下载?

我试图做一个POST调用服务器,发送JSON数据。 服务器接受JSON数据,做一些处理,然后发回一个Excel .xlsx作为响应。 我希望浏览器打开“保存文件为”对话框供用户保存。 我一直在寻找一个干净的解决scheme来做到这一点。 但在这个问题的一个可能的解决schemeJavaScript / jQuery通过POST与JSON数据下载文件build议将Excel文件保存在服务器上,然后发回一个URL链接,然后打开一个iframe供用户下载。 这对我来说是不可行的,因为用户可以在服务器上创build数千个Excel文件,并且服务器的存储空间有限。 我想要解决scheme是即时的。 我见过的另一个解决schemebuild议将数据转换为表单,然后使用表单提交。 再次,这是一个不行,因为我的数据是在几百甚至上千的Excel行。

我的jQuery POST调用:

    $ .ajax({type:'POST',url:'/ server / path',data:JSON.stringify(dataSent),processData:false,success:function(data,textStatus,jqXHR){},error:function result,status,err){},contentType:'application / json',dataType:'application / vnd.ms-excel'}); 

在后端我设置了这个:

Response.header(“Content-Type”,“application / vnd.ms-excel”)

Response.header(“Content-Disposition”,“attachment; filename = \”export.xlsx \“”)

什么是强制浏览器打开“另存为…”对话框的最佳方法?

谢谢,

我不知道有一种方法来通过JS接收二进制数据,然后启动下载。

如果我的任务是这样的,我会改变方法到一个GET和生成文件(作为一个stream),并返回与适当的标题(内容处置,内容长度,内容types)

我想办法解决这个问题。 而不是做一个POST调用来强制浏览器打开保存对话框,我会做一个POST调用来生成文件,然后临时存储在服务器上的文件,返回文件名。 然后用“Content-Disposition:attachment; filename = filename1”对此文件使用GET调用。 带有该标题的GET调用将强制浏览器始终打开“保存此文件”对话框。