Gen*_*int 8 javascript image mime-types
在我的 HTML 文档中,有一个图像
<img src="https://www.gravatar.com/avatar/1d9c87a4d5cbcae4c76e867cb6861fa0?s=48&d=identicon&r=PG&f=1"/>
Run Code Online (Sandbox Code Playgroud)
当在浏览器(例如 Chrome)中打开该文档时,我们可以根据 HTTP 响应标头找到Content-Type该图像位于Chrome 开发者工具 -> 网络选项卡中。"image/png"
Content-Type图像加载后如何使用JavaScript。
更具体地说,我需要的是如下所示的函数。
/**
* @param {HTMLImageElement} img
* @return {String} the content type, e.g. "image/png", "image/svg+xml"
*/
getImgContentType(img) {
// TODO
}
Run Code Online (Sandbox Code Playgroud)
您将需要发出 HEAD 请求来获取标头。这是使用fetch API 的另一个简单版本,如下所示:
getImgContentType (img) {
return fetch(img.src, { method: 'HEAD' })
.then(response => response.headers.get('Content-type'))
}
Run Code Online (Sandbox Code Playgroud)
用法是:
obj.getImgContentType().then(type => {
console.log(type)
})
Run Code Online (Sandbox Code Playgroud)
另请注意,该getImgContentType接口需要异步。返回承诺很方便。
使用 XMLHttpRequest 类型HEAD(类型HEAD表示请求只会接收标头数据,不会重新下载图像):
getImgContentType(img) {
var xhr = new XMLHttpRequest();
xhr.open("HEAD", img.src, true);
xhr.onreadystatechange = function() {
if (this.readyState == this.DONE) {
console.log(xhr.getResponseHeader("Content-Type")); // type
console.log(xhr.getResponseHeader("Content-Length")); // size
// ...
}
};
xhr.send();
}
Run Code Online (Sandbox Code Playgroud)
请注意,并非所有服务器都会实现HEAD请求。