如何确定 JavaScript 中的文件大小?

IT技术 javascript image file greasemonkey
2021-03-20 05:26:47

我帮助管理一个在线论坛,在这个论坛上我们限制签名的大小。目前我们通过我写的一个简单的 Greasemonkey 脚本来测试它;我们用 a 包裹所有签名<div>,脚本查找它们,然后测量 div 的高度和宽度。

脚本现在所做的就是确保签名位于特定的高度/宽度。我想开始自动测量签名内图像的文件大小,以便脚本可以自动标记在签名中包含大图像的用户。但是,我似乎找不到一种方法来测量页面上加载的图像的大小。我搜索并找到了一个 IE 特有的属性 (element.fileSize),但我显然不能在我的 Greasemonkey 脚本中使用它。

有没有办法通过 JavaScript 在 Firefox 中找出图像的文件大小?

编辑:人们误解了这个问题。论坛本身不托管图片;我们托管人们输入的 BBCode 作为他们的签名。因此,例如,人们输入以下内容:

This is my signature, check out my [url=http://google.com]awesome website[/url]!
This image is cool!  [img]http://image.gif[/img]

我希望能够通过 Greasemonkey 检查这些图像。我可以编写一个批处理脚本来扫描所有这些,但我只是想知道是否有办法增加我当前的脚本。

6个回答

如您所知,IE 支持图像的 fileSize 属性。在其他浏览器中没有这样的运气......但是,您应该能够修改此脚本:

http://natbat.net/2008/Aug/27/addSizes/

它使用 JSON 读取文件的 HTTP 标头并显示它们的实际文件大小。这应该可以帮助您防止人们上传大型动画 GIF。

至于获取尺寸:

var img = new Image();
theImage.src = "someimage.jpg";
actualwidth = theImage.width;
actualheight = theImage.height;

这当然是一种纯客户端方法,可以最好地处理服务器端。

人们不会将图像上传到我们的服务器。它们链接到其他服务器上的图像。如果他们使用某种动态图像,那么我们无法在服务器上验证图像大小。
2021-05-09 05:26:47

实际上,使用 HTML5,这现在是可能的,
在此处阅读更多信息

简短的回答,你不能

另外,检查 jGuru如何在具有输入文件类型的表单中检查 JavaScript 的文件大小?

你会发现一些重要的点

答案很简单,你不能。

原因:浏览器安全不允许脚本(Javascript/VBScript)甚至小程序和 ActiveX 控件从本地硬盘读取文件。如果您的代码由某个证书颁发机构 (CA) 签名,则您只能读取文件。现在输入类型“FILE”也没有读取文件的权限。我们对此无能为力,因为这就是 HTML 所说的。因此,由于它无法读取文件,因此无法找到与输入标记相关联的文件的大小。由于它找不到文件大小,因此 JavaScript/VBScript 没有公开函数来返回文件大小。但是,如果您需要查找文件大小,请说是为了限制上传到您的网络服务器的文件的大小。然后您可以通过在服务器端计算文件内容来实现,一旦用户将其提交给服务器。

请包括该页面的相关部分。如果该链接失效,您的答案将变得毫无value。
2021-04-22 05:26:47
@amr-elgarhy,stackoverflow.com /questions/2966076/...
2021-04-29 05:26:47

服务器端验证总是一个更好的选择,但在你的情况下,我可以理解你为什么想要做这个客户端。

此外,似乎其他人可能误读了这个问题,并且 Daniel 想要测试的图像已经上传,在这种情况下,有一种相当简单的方法可以这样做(前提是图像与脚本在同一域中) .

var getFileSize = function(address, responseHandler) {
  var req = new XMLHttpRequest();  

  req.open('head', address, true);  
  req.onreadystatechange = responseHandler;
  req.send(null);  
}

var responseHandler = function(resp) {
  if ( this.readyState == 1 ) {
    this.abort();
  }
  console.log(this.getResponseHeader("Content-length"));
};

getFileSize("http://stackoverflow.com/content/img/so/logo.png", responseHandler);

繁荣。此示例适用于 FF3,可能适用于 2。由于您使用 Greasemonkey 来执行此操作,因此浏览器兼容性似乎不是问题。

我不确定 Greasemonkey 是否共享相同的 XML RPC 域限制,但是如果您需要的图像文件与脚本位于不同的域,那么您可能需要考虑使用一些 iframe 魔法。

客户端验证不足以实现您的目标。一个简单的发布请求将允许用户上传他们想要的任何图像,无论您为他们提供什么 html 或 javascript。

需要大小验证......例如它的文件管理器和上传中心......如果接收更大尺寸的电影和电影,服务器会收到未使用的数据
2021-05-05 05:26:47
我认为您不明白我在问什么,我更新了 OP 以更好地反映手头的任务。(除了指向图像的代码,人们不会将任何内容上传到服务器。)
2021-05-15 05:26:47