上传文件前如何确定文件大小?

4
我们遇到了一个问题。当用户上传一个大于10MB的文件时,页面会超时并清除数据,没有任何错误提示来描述发生了什么。理想情况下,我们希望能够在用户选择要上传的文件时检查文件大小,但我不知道这是否可能。我们的框架是使用ASP.NET、VB.NET和Javascript(以及ExtJS 3.0)构建的,并在IE中运行。
有没有办法解决这个问题?

6个回答

4

我认为使用标准的HTML表单无法实现这一点。

可以看看SWFUpload,它可以让您控制文件大小。


3
以下代码在Firefox和Chrome中有效,但在IE和Opera中会被省略检查。我认为在IE中,您可能需要使用ActiveXObject来实现相同的功能。该代码轻微地修改自这里
<script type="text/javascript">
var clicked = false;
function checkSize() {
var node = document.getElementById('file');
var check = node.files[0].fileSize;
if (check > 4096)
{
alert('Your file is too big!');
 return false;
}
}
</script>

<form enctype="multipart/form-data" action="upload_file.php" method="post" class="body">
Select a file: <input type='file' id='file' name='file'>
 <input type='submit' value=' Upload File ' onClick='return checkSize()'> 
</form>

我不确定这是否有效。主要问题是,checkSize()将在哪里运行?如果它没有访问用户文件系统并且没有先上传该文件,我不知道它如何找到有关此文件的信息。 - Scott
我在发布之前进行了测试,它确实可以工作。它在提交按钮的onClick处理程序中运行“checkSize”,在提交发生之前执行(在onClick事件中返回false会取消提交)。请注意,正如我在帖子中提到的那样,它仅适用于Firefox和Chrome。 - Brian

2
您可以在web配置文件中设置限制,该属性名为MaxRequestLength。
在httpRuntime部分的web.config文件中进行设置:
<httpRuntime executionTimeout="90" maxRequestLength="4096" /> <-- number of bytes

这应该插入在<system.web>下面

至于检查文件大小,就像这样简单

If txtFileUpload.PostedFile.ContentLength > 1024 Then <-- bytes

实际上,我们已经在web.config中设置了文件大小限制,但是当我们尝试提交一个超过限制的文件时,它不会被提交。同时,它也不会告诉用户提交失败,或者抛出任何错误,因为我们不确定在哪里/如何捕获它并显示相关信息。 - Scott
您可以在用户单击提交按钮时进行检查,参见我的第二段代码片段。 - Marko
你尝试过实现自定义错误页面吗?在那里可以捕获错误。 - David Murdoch
2
马尔科,除非文件的内存对象已经被创建,否则运行是不可能的,由于web.config大小限制,这永远不会发生。至少我们的配置是这样设置的。 - Scott
大卫,你能进一步阐述你的想法吗? - Scott

1
你能使用或者尝试使用ActiveXObject吗?
未经测试(可能在IE7+中无法正常工作)
function checkSize(fileInput, limit){
    if(!window.ActiveXObject){
        return false;
    }
    var oas = new ActiveXObject("Scripting.FileSystemObject"),
        d = fileInput.value,
        e = oas.getFile(d),
        f = e.size;
    return f <= limit; // in bytes
}

0

如果您可以使用Flash,可以尝试swfupload


0

使用普通的JavaScript和HTML文件标签是不可能的,因为由于安全原因,页面无法访问用户的磁盘,这是检查文件大小所必需的。

我看到过使用Flash来完成这个功能,但我不是Flash专家。


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