【问题标题】:Ensure file size of uploaded file is lower than maxRequestLength before the upload occurs?在上传之前确保上传文件的文件大小低于 maxRequestLength?
【发布时间】:2011-05-14 11:47:34
【问题描述】:

我有一个带有 FileUpload 控件的表单,用户可以在其中上传图片。能否保证上传图片的文件大小在上传前小于配置的maxRequestLength,从而防止文件过大时抛出异常?

我最初尝试查看控件的 PostedFile 的 ContentLength 无济于事,因为文件已经提交。

我没有兴趣增加 maxRequestLength。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    甚至可以在上传的文件完全传输之前确定正在上传的文件的大小。即使使用 Internet Explorer。通过使用 HTTP 的内容长度标头!
    在 Java 世界中:
    首先,如果您处理在第一个 servlet/filter/controller 中到达服务器的请求,在任何先前的线程质量之前到达服务器,您将可以在 content-length 标头中获得总文件大小(request.获取内容长度())。

    其次 - 看看证明它是可能的 ajax 实现:http://www.ajaxfilebrowser.com/

    【讨论】:

      【解决方案2】:

      听起来您有一个要求,“防止异常”,以及您认为应该实现该目标的方式,“检查客户端的文件大小”。

      使用 Flash 或 Silverlight 等客户端技术,您只能 100% 在客户端验证文件大小。这可以防止异常,但会迫使您将自己绑定到特定的客户端技术。

      您可以阻止该异常,但它确实在文件上传后发生(出于您之前所述的原因)。查看本文以获取代码示例:http://aspnetresources.com/articles/dark_side_of_file_uploads

      类似的功能在 NeatUpload(开源,LGPL)等文件上传组件中提供了开箱即用的功能:http://www.brettle.com/NeatUpload-1.3/dotnet/docs/Manual.html -> 请参阅第 4.5 节。

      【讨论】:

        【解决方案3】:

        从可用性的角度来看,告诉人们不要使用的简单信息将大大有助于预防问题。

        然后你可以试试这个(YMMV):这只是对浏览器的提示,并且取决于支持语法的浏览器。隐藏字段显然需要紧跟在您的文件输入之前(或者在 asp.net 中,您的文件上传控件,请检查浏览器中的标记以确保)。

        <input type="hidden" name="MAX_FILE_SIZE" value="500" />
        <input type="file" />
        

        该值以 Kb 为单位 - 因此上述内容将限制为半兆字节。但是有些浏览器不支持这个,所以你仍然需要在服务器端检查它,或者接受一些使用奇怪/古老/不同浏览器的人可能仍然尝试提交超大文件。

        this webpagealso this one 找到

        【讨论】:

          【解决方案4】:

          我只是认为这在 HTTP 的范围内是不可能的,我相信您将不得不为此使用 Flash 上传器。服务器知道文件大小的唯一方法是让服务器获取文件

          查看http://www.swfupload.orghttp://demo.swfupload.org/v220/featuresdemo/index.php 的厨房水槽演示

          【讨论】:

          • 我实际上在这个线程中看到了一个这样做的例子:forums.asp.net/p/1096161/1655494.aspx 但我不太喜欢这种检查是对通过应用程序的所有请求进行的想法。
          • 我仍然认为客户端大小是您最好的选择,这也应该允许多次上传
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-10
          • 2022-11-13
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多