Javascript 在浏览器中渲染文件

Javascript 在浏览器中渲染文件,javascript,html,web-services,Javascript,Html,Web Services,我正在向rest服务发送post请求以获取内容。 内容可以是任何类型。(pdf、doc、pptx、docx、img、png、mp3等) 我有一个非常简单的html和javascript来加载内容 html 现在开始排队 var blob=new Blob([bytes], { type: "*/*"}); 我如何知道它是什么类型的文件。。。。如果我只是让它像*/*那样,它不允许我将其流式传输到浏览器。它需要一个特定的类型。正如您在评论中所说的,您需要获取内容类型标题,您已经为响应设置了。下面是

我正在向rest服务发送post请求以获取内容。 内容可以是任何类型。(pdf、doc、pptx、docx、img、png、mp3等)

我有一个非常简单的html和javascript来加载内容

html

现在开始排队

var blob=new Blob([bytes], { type: "*/*"});

我如何知道它是什么类型的文件。。。。如果我只是让它像
*/*
那样,它不允许我将其流式传输到浏览器。它需要一个特定的类型。

正如您在评论中所说的,您需要获取内容类型标题,您已经为响应设置了。下面是一个简单的响应,它显示了如何获取内容类型标题

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()
方法的更多信息,您可以阅读

出于流式传输的原因,您可以使用所谓的数据URI

<a href="data:application/octet-stream;charset=utf-16le;base64,//5mAG8AbwAgAGIAYQByAAoA">text file</a>


对于数据URI的声明指出,对数据URI的支持正在广泛传播。要强制自动下载流,可以在动态生成的数据URI链接上执行单击事件

您是否自行开发rest服务?最好发送一个具有适当内容类型的响应头,然后使用JavaScript对其进行评估。另一种方法是将包含内容类型和二进制数据的JSON对象作为两个不同的参数发送回。但离这一点很远的是,不可能在所有主流浏览器版本中呈现pdf文件。是否确实要渲染而不是提供下载?是的,我编写了服务。服务返回的mime类型取决于文件内容
headers.setContentType(MediaType.parseMediaType(fileType))
对于这种情况,它将返回:
application/vnd.openxmlformats of icedocument.presentationml.presentation
,id为12345678。但是当我从javascript加载它时,我不确定如何获取它。但是这不会流式传输文档的内容。如果你想呈现一个特定的文件,我仍然会在浏览器中得到blob。现在你想要流。正如我之前所说,如果没有第三方LIB,通过跨浏览器问题进行渲染将不容易。使用数据URI强制下载streeam很容易。我已经编辑了上面的答案。
xhr = new XMLHttpRequest();

xhr.addEventListener('load', requestHandler);
xhr.open('GET', your_service_url_here);
xhr.send();

function requestHandler()
{
    console.log(this.getResponseHeader('content-type'));
}
<a href="data:application/octet-stream;charset=utf-16le;base64,//5mAG8AbwAgAGIAYQByAAoA">text file</a>