【问题标题】:How to Upload 100MB file?如何上传 100MB 的文件?
【发布时间】:2011-08-14 23:57:57
【问题描述】:

我正在用 ASP.NET 设计一个文件服务器应用程序。我必须上传一个大小为 100MB 的文件,然后将其保存到varbinary(max) 的 SQL Server 2008 数据库中。必须在数据库中保存文件。我正在使用FileUpload 控件。请建议我如何处理这么大的文件?
更新
任何代码示例都会有很大帮助,任何代码示例?
如何分块读取文件?

【问题讨论】:

    标签: c# asp.net sql-server file-upload


    【解决方案1】:

    您可以通过将特殊的 web.config 放入该目录来更改目录及其子目录的默认限制 (4mb)。这样您就不必让整个网站都允许大量上传(这样做会使您面临某些类型的攻击)。

    这是一个来自生产应用的示例。这个设置为 200mb:

    <?xml version="1.0"?>
    <!-- Nested this web.config here to allow for huge uploads (up to 200mb)  -->
    
    <configuration>
        <system.web>
          <httpRuntime maxRequestLength="200000"/>
        </system.web>
    </configuration>
    

    嵌套 web.configs 没有任何负面影响 - 您现有的 web.config 设置仍将在站点范围内工作,并且从此目录开始,这些 httpRuntime 设置将被继承。

    在处理上传的页面上,确保您的 ScriptTimeout 高于正常值。这是以秒为单位的:

    Server.ScriptTimeout = 1200;
    

    我喜欢在页面而不是 web.config 上设置它,因为它将增加的超时隔离到仅这一页。

    在 SQL 方面,varbinary 列最多可以有 2 个 gig,所以你可以去那里。

    更新:我已经对 50+ meg 文件使用了这种方法,但是在 100 meg 点上,标准方法可能会失效。有很多第三方控件可以从那里接管,但我可能会仔细研究 Telerik 的 RadUpload,因为它们是一个高质量的名称,而且看起来非常精美:RadUpload

    至于你关于分块读取文件的更新,如果你真的想自己写,Bobby D 指出这篇文章:Uploading Large Files Using an HttpModule

    【讨论】:

      【解决方案2】:

      ASP.NET 对文件上传的默认限制为 4MB。此article 描述了如何更改该默认值并讨论了上传大文件的一些问题。

      【讨论】:

        【解决方案3】:

        试试这个:Large file uploads in ASP.NET

        如果有帮助,请告诉我。

        【讨论】:

          【解决方案4】:

          【讨论】:

            【解决方案5】:

            因为您使用的是 SQL Server 2008,varbinary 列的最大容量为 2gb,所以应该没问题。任何常规的上传脚本都可能有效。但是,当您进行这种大小的上传时,底层 HTTP 或 TCP/IP 连接可能会成为问题,但您确实无能为力。

            【讨论】:

            • 同意.. 确保您将request timeout 设置得相当高.. 您可能想沿着these lines 做一些事情来分块/缓冲上传..
            • 我个人不知道,但你应该调查一下。
            【解决方案6】:

            将其分解为多个部分,为每个部分分配一个序列号,在服务器端收到文件后(假设 DB 在那里)收集,根据序列号对部分进行排序,然后通过剥离序列号重新加入它们.希望你不会超时,如果这是唯一的问题!可能您可以使用 TPL 上传多个部分并以相同的方式重新加入它们!

            【讨论】:

              猜你喜欢
              • 2020-06-05
              • 2011-06-18
              • 1970-01-01
              • 1970-01-01
              • 2019-04-23
              • 2021-06-09
              • 1970-01-01
              • 2020-07-27
              • 1970-01-01
              相关资源
              最近更新 更多