验证或读取javascript中的远程图像类型
以下是我所说的神奇数字的链接:验证或读取javascript中的远程图像类型,javascript,image,file,Javascript,Image,File,以下是我所说的神奇数字的链接: 如何使用JavaScript远程读取文件的前几个字节(神奇数字)以确定它是否是图像文件?JavaScript主要是一种客户端语言,因此您不能简单地从自己的页面以编程方式读取其他站点上托管的文件XMLHttpRequest将允许您检索远程数据,但这将检索整个文件,而不是前几个字节。做任何更奇特的事情都需要一个服务器端助手,例如PHP脚本或类似的工具 您还应该知道,某些HTTP服务器无论如何都不允许您从输出中检索一定范围的字节,它们总是返回整个文件。因此,即使使用(
如何使用JavaScript远程读取文件的前几个字节(神奇数字)以确定它是否是图像文件?JavaScript主要是一种客户端语言,因此您不能简单地从自己的页面以编程方式读取其他站点上托管的文件
XMLHttpRequest
将允许您检索远程数据,但这将检索整个文件,而不是前几个字节。做任何更奇特的事情都需要一个服务器端助手,例如PHP脚本或类似的工具
您还应该知道,某些HTTP服务器无论如何都不允许您从输出中检索一定范围的字节,它们总是返回整个文件。因此,即使使用(比如)curl或wget的PHP脚本,您也可能无法使其适用于所有远程站点:
(以上内容涵盖了命令行curl,但结论具有广泛的适用性。)
Edit:Sergiu指出,将
Range
头添加到XMLHttpRequest
中至少对某些服务器有效(Range头对于HTTP 1.1是可选的)。然而,跨域图像检索仍然需要进一步的支持,例如CORS。还有其他类似的问题。像一个。它可以帮助您将图像作为二进制数据读取
您需要读取整个图像,而不仅仅是前几个字节。这是JavaScript的一个限制。您可以使用XMLHttpRequest:
- 使用请求头指定只需要几个字节
- 如果浏览器支持请求,那么您甚至可以请求在其他站点上找到的图像,否则您只能使用服务器
- 如果浏览器足够新,您甚至可以以字节而不是字符的形式访问响应
var request = new XMLHttpRequest();
request.open('GET', '/download/logo.png');
request.setRequestHeader('Range', 'bytes=0-5');
request.responseType = 'arraybuffer'
request.addEventListener('load', function() {
console.log(new Uint8Array(request.response));
});
request.send();
是的,我读到这是不可能的。当然,你确实可以从任何域加载图像——即使没有ajax。但是你是对的,你只能加载整个资源。谢谢。我现在从其他一些阅读资料中了解到了这一点,他们设计JS的方式就是为了消除安全漏洞。但它会很有用。您引用的是
同一原产地政策
,在本例中不适用。但是你对一切或无
部分的看法是正确的。@SaniHuttunen我相信所有的请求都会受到这一点的影响,即使是图像。看这里的测试小提琴:好的,现在这很酷。虽然在我编写商业应用程序时无法使用,但我需要支持旧浏览器以及跨域URL。不过,我肯定会在其他一些项目中使用它,谢谢!