无论如何要在上传之前确定文件大小?

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

应该插入到&lt;system.web&gt;

至于查看文件大小,就这么简单

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 人。

【讨论】:

以上是关于无论如何要在上传之前确定文件大小?的主要内容,如果未能解决你的问题,请参考以下文章

上传文件的大小

如何在上传到服务器之前减小图像文件大小

如何在 R 中下载之前确定在线文件大小?

在使用 PHP 上传到临时目录之前检查图像的文件大小

在 ASP.NET 4 中上传之前如何检查 .xls 文件大小?

使用express的bodyParser上传文件,请问如何设置文件大小