【问题标题】:Anyway to determine file size before upload?无论如何要在上传之前确定文件大小?
【发布时间】:2011-03-13 13:11:53
【问题描述】:

所以我们遇到了这个问题。用户去上传一个文件,如果它超过 10MB,它只是有点超时,然后清除,并且没有抛出好的错误来描述发生了什么。理想情况下,我们希望在用户选择他们要上传的文件时检查文件大小,但我不知道这是否可能。我们的框架是用 ASP.NET、VB.NET 和 Javascript(以及 ExtJS 3.0)构建的,它在 IE 中运行。

无论如何要这样做?

【问题讨论】:

标签: asp.net javascript vb.net extjs


【解决方案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 人。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-14
          • 2020-12-16
          • 2012-05-19
          • 2012-05-17
          • 2019-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多