我正在将发布请求发送到休息服务以获取内容。 内容可以是任何类型。 (pdf,doc,pptx,docx,img,png,mp3等)
我有一个非常简单的html和javascript来加载内容。
html
<html>
<head>
<script type="text/javascript" src="test.js"></script>
click
</head>
<body>
<button type="submit" target='_blank' onclick="Test()">Test</button>
</body>
</html>
JavaScript
function Test() {
console.log("started");
var xhttp = new XMLHttpRequest();
xhttp.responseType = "arraybuffer";
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.response);
var bytes = new Uint8Array(this.response); // pass byte response to this constructor
var blob=new Blob([bytes], { type: "*/*"});// change resultByte to bytes
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.click();
}
};
xhttp.open("POST", "http://localhost:8080/testService", true);
xhttp.setRequestHeader("Content-type", "application/json");
xhttp.setRequestHeader("Accept", "*/*");
xhttp.send("{ \"Id\": \"12345678\" }");
}
现在在线
var blob=new Blob([bytes], { type: "*/*"});
我怎么知道它是什么类型的文件...。如果我像*/*
一样保留它,它就不能将其流式传输到浏览器。
答案 0 :(得分:1)
正如您在注释中指出的那样,您需要获取内容类型标题,您已经设置了响应。这是一个简单的响应,显示了如何获取内容类型标头。
xhr = new XMLHttpRequest();
xhr.addEventListener('load', requestHandler);
xhr.open('GET', your_service_url_here);
xhr.send();
function requestHandler()
{
console.log(this.getResponseHeader('content-type'));
}
有关XMLHttpRequest.getResponseHeader()
方法的更多信息,您可以阅读here。
出于流传输的原因,您可以使用所谓的数据URI。
<a href="data:application/octet-stream;charset=utf-16le;base64,//5mAG8AbwAgAGIAYQByAAoA">text file</a>
数据URI的caniuse.com entry指出,对数据URI的支持已经广泛传播。要强制自动下载流,您可以在动态生成的数据URI链接上执行click事件。