无论如何要在上传之前确定文件大小?
Posted
技术标签:
【中文标题】无论如何要在上传之前确定文件大小?【英文标题】:Anyway to determine file size before upload? 【发布时间】:2011-03-13 13:11:53 【问题描述】:所以我们遇到了这个问题。用户去上传一个文件,如果它超过 10MB,它只是有点超时,然后清除,并且没有抛出好的错误来描述发生了什么。理想情况下,我们希望在用户选择他们要上传的文件时检查文件大小,但我不知道这是否可能。我们的框架是用 ASP.NET、VB.NET 和 javascript(以及 ExtJS 3.0)构建的,它在 IE 中运行。
无论如何要这样做?
【问题讨论】:
How do you restrict the size of a file being uploaded with JavaScript (or Java) without transferring the entire file? 的可能重复项 【参考方案1】:我认为没有任何方法可以使用标准 html 表单来做到这一点。
看看SWFUpload。这将让您控制文件大小。
【讨论】:
【参考方案2】:以下代码在 Firefox 和 Chrome 中有效,但在 IE 和 Opera 中省略了检查。我认为在 IE 中您可能需要使用 ActiveXObject。取自 here 并稍作修改。
<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()。如果它无权访问用户文件系统并且没有先上传它,我看不到它如何找到有关此文件的信息。 我在发布之前对其进行了测试,它确实有效。它在提交按钮的 onClick 处理程序中运行“checkSize”,该处理程序在提交发生之前执行(在 onClick 事件中返回 false 会取消提交)。请注意,正如我在帖子中提到的那样,它仅适用于 Firefox 和 Chrome。【参考方案3】:您可以在 web config 中设置限制,该属性称为 MaxRequestLength。
在 web.config 的 httpRuntime 部分中设置它:
<httpRuntime executionTimeout="90" maxRequestLength="4096" /> <-- number of bytes
应该插入到<system.web>
下
至于查看文件大小,就这么简单
If txtFileUpload.PostedFile.ContentLength > 1024 Then <-- bytes
【讨论】:
其实web.config里已经有了,但是当我们去提交一个文件时,如果大于我们的限制它不会提交,但是它也不会让用户知道它没有, 或抛出任何类型的错误,因为我们不确定在哪里/如何捕获它并显示某些内容。 你可以检查用户何时点击提交,见我的第二个代码sn-p。 您是否尝试过实现自定义错误页面? Re 可能会在那里捕获错误。 Marko,除非在文件的内存中创建了一个对象,否则这不是不可能运行吗?由于 web.config 大小限制,这永远不会发生。至少我们的设置是这样的。 大卫,您能进一步详细说明您的想法吗?【参考方案4】:您可以使用或尝试过使用 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
【讨论】:
【参考方案5】:如果您可以选择 Flash,您可以尝试swfupload。
【讨论】:
【参考方案6】:使用普通的 javascript 和 HTML 文件标签是不可能做到这一点的,因为安全原因,页面无法访问需要检查文件大小的用户磁盘。
我已经看到用 flash 完成了,但我不是 flash 人。
【讨论】:
以上是关于无论如何要在上传之前确定文件大小?的主要内容,如果未能解决你的问题,请参考以下文章