我有一个简单的webapp,我打算从REST api提供文件下载。该文件的类型为.xlsx。
我天真地尝试完成此操作使用了一种设计模式,我从REST api的其他数据中复制了该模式,例如:
var requestData = JSON.stringify({level: plevel, yearMonthStart: beginningYearmo, yearMonthEnd: endingYearmo});
var url = 'http://localhost:8181/v2/file/download';
d3.request(url)
.header("X-Requested-With", "XMLHttpRequest")
.header("Content-Type", "application/octet-stream")
.mimeType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.send("POST",
requestData,
function(rawData){
console.log(rawData);
});
服务器的响应是415错误代码(不支持的有效负载媒体类型)。
我试图为文件流设置合适的标头,如上所示。
我的预期行为是接受请求而没有错误,浏览器启动文件下载。任何关于如何更好地实现这一目标的指导都将受到赞赏。
答案 0 :(得分:0)
我在其他帖子中找到了一些照亮方式的例子。
您可以使用blob文件执行此操作。这是一个例子:
function downloadReport(level, beginningYearmo, endingYearmo){
var requestData = JSON.stringify({plevel: level, yearMonthStart: beginningYearmo, yearMonthEnd: endingYearmo});
var url = 'http://localhost:8181/file/download';
d3.request(url)
.header("X-Requested-With", "XMLHttpRequest")
.header("Content-Type", "application/json")
.header("Accept","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.header("Cache-Control", "no-cache")
.header("Accept-Charset", "utf-8")
.on("load", function(data){
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
console.log("Download request was successful.");
})
.on("error", function(error){ alert("Error: ", error) })
.send("POST", requestData);
}