如何在上传文件之前检索文件大小?

6

我在我的Web应用程序中有一个文件输入标签。 在将其发送到服务器之前,我想检查文件大小是否合适。 当然,我仍然需要在服务器端进行验证。 有没有办法使用JavaScript实现此操作?它必须在IE7+和FF3+中工作。 谢谢。

编辑:somefileinputobject.files [0] .filesize在FF中有效,但在IE中无效。


不幸的是,如果不使用插件(例如Flash),这是尚未跨平台的事情。http://www.w3.org/TR/FileAPI/是Firefox支持的工作规范。 - Matthew
如何使用JavaScript或Java限制上传文件的大小? - Roger Pate
在现代浏览器中,这是可以在不向服务器发送请求的情况下实现的,尽管验证仍然必须在服务器上进行。请参阅此新问题和答案 - Pointy
@Pointy,我的修改与那个答案有什么不同? - geowa4
@geowa4 哦,抱歉;我并不是想暗示你的观察有什么问题。我只是认为提供一个新问题的链接会很有用。 - Pointy
5个回答

2
这是一个棘手的问题。您需要使用AJAX,并在POST请求中使用浏览器发送到服务器的文件大小头来完成此操作。
雅虎的UI库提供了一个工具,可以帮助解决这个问题。YUI Uploader

如果我可以在Ajax提交之前使用jQuery / Javascript检查文件大小标题,那么这个解决方案对我有用。这是可能的吗?如果是,怎么做?谢谢。 - TonE
恐怕不是。我认为Flash有这方面的能力。如果您可以承受往返服务器请求的性能成本,我会让您的脚本在POST时存储头信息,然后让JQuery在单独的调用中检索它们。我相信这就是YUI工具的工作方式。 - Jeremy DeGroot

0

Javascript 无法做到这一点。这将会带来严重的安全问题。也许 Flash 可以。


1
JS可以实现。请参见http://www.w3.org/TR/FileAPI/。目前只有FF 3.6支持(据我所知)。从安全角度来看,它并不是不安全的,因为用户必须选择文件。然而,从另一个角度来看,它确实不太安全,因为他们不再需要按提交按钮。 - Matthew
如果说有什么的话,这个声明是对Flash的控诉。 - Shaggy Frog
我甚至不知道我是怎么到这里来的,但是今天,在所有主要浏览器中都可以实现;D - GottZ

0

使用Javascript无法在所有浏览器上可靠地完成,但您可以通过web.config限制发布数据的总大小


0
如果您使用传统的文件输入控件,那么您真的没有太多选择。您无法在客户端上检查它,在服务器端检查之前,它将达到您配置的maxRequestLength。不过,当超过maxRequestLength时,您可以捕获异常。

0
短答案:不,你应该在服务器上处理这个问题。
长答案:不可靠。使用IE,你可以做一些像这样的事情:
function checkSize(filespec) {
var fso, f, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile(filespec);
s = f.size;
// Do something with var s
}

但是这很容易被浏览器的安全设置或使用另一个浏览器或平台所破坏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接