在 javascript 中验证或读取远程图像类型
Validating or reading a remote image type in javascript
这里有一个链接,指向我所说的幻数:文件魔术
如何使用 JavaScript 远程读取文件的前几个字节(幻数)以确定它是否是图像文件?
JavaScript
主要是一种客户端语言,因此您不能简单地以编程方式从自己的页面读取其他站点上托管的文件。 XMLHttpRequest
将允许您检索远程数据,但这将检索整个文件,而不是前几个字节。做任何更花哨的事情都需要一个服务器端的助手,例如PHP脚本或类似的东西。
您还应该知道,某些HTTP服务器无论如何都不允许您从输出中检索一定范围的字节 - 它们将始终返回整个文件。因此,即使使用使用 curl 或 wget 的 PHP 脚本,您也可能无法使其适用于所有远程站点:
是否可以使用 Linux 命令从 HTTP 服务器只读前 N 个字节?
(以上内容涵盖了命令行卷曲,但结论广泛适用。
编辑:Sergiu指出,将Range
标头添加到XMLHttpRequest
中是可行的,至少对于某些服务器是这样(范围标头对于HTTP 1.1是可选的)。但是,跨域图像检索仍然需要进一步的支持,例如CORS。
关于SO还有其他类似的问题。比如这个。
它可能会帮助您将图像读取为二进制数据。
您将需要读取整个图像,而不仅仅是前几个字节。这是 JavaScript 的一个限制。
你可以使用 XMLHttpRequest 来实现这一点:
- 使用 Range 请求标头指定您只需要几个字节
- 如果浏览器支持跨源请求,那么您甚至可以请求在其他网站上找到的图像,否则您只能使用您的服务器
- 如果浏览器足够新,您甚至可以将响应作为 ArrayBuffer 访问,以字节而不是字符的形式访问单个字节
这对我有用:
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();
相关文章:
- 未捕获的类型错误: 无法读取未定义的属性“图像”
- 如何通过内容类型为“image/jpeg”的 AJAX 调用将画布图像从 GUI 保存到后端
- 灯箱类型的东西,使图像成为浏览器高度的百分比
- 在 javascript 中验证或读取远程图像类型
- ExtJS:“图像”类型的精灵:如何更改像素
- 输入类型的图像在Internet Explorer中不起作用,但在Chrome和Firefox中起作用
- 提交输入类型=“;图像“;到另一个servlet时,未能返回任何参数
- websocketapi-图像编码在客户端不产生任何图像类型
- jQuery image丢弃无效的图像类型,并显示一条无效的消息而不是警告框
- 根据 base 64 内容确定图像类型
- 转换数据:image/png;base64转换为数据库中的图像类型
- 从第4版开始没有图像类型
- Base64图像SRC当我不知道图像类型
- 尝试添加特定图像类型的图像计数| jQuery
- 如何做图像类型验证在magento
- 在Bootstrap网站标题中使用的图像类型
- 如何验证只接受(任何)图像类型文件的表单
- 图像视图-无效的图像类型
- 如何获取图像类型,如果它的src没有'
- 如果上传的文件是音频、视频或图像类型,在使用JavaScript验证时依赖MIME TYPE是否可以?