如何在加载后使用 javascript 获取 <img> 内容类型

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)

dfs*_*fsq 5

您将需要发出 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接口需要异步。返回承诺很方便。


ibr*_*rir 4

使用 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请求。

  • @devnull69 无需担心 HEAD 请求(如果您不发送自定义请求标头,在本例中我们不会发送)。 (4认同)
  • ....并且服务器需要通过发送相应的标头信息来接受跨源请求(CORS) (2认同)