如何上传100MB文件?

时间:2011-04-28 19:27:22

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

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

6 个答案:

答案 0 :(得分:9)

您可以通过将特殊的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场演出,所以你很高兴去那里。

更新:我已经将这种方法用于50+ meg文件,但有可能在100兆点时标准方法可能会崩溃。有许多第三方控件可以从那里接管,但我可能会很努力地看看Telerik的RadUpload,因为它们是一个高质量的名称,它看起来很精致:RadUpload

关于以块的形式阅读文件的更新,如果你真的想自己写一下,Bobby D指出了这篇文章:Uploading Large Files Using an HttpModule

答案 1 :(得分:3)

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

如果有帮助,请告诉我。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

答案 4 :(得分:1)

因为您使用SQL Server 2008,其varbinary列的最大值为2gb,所以您应该没问题。任何常规上传脚本都可能有效。当你进入那个大小的上传时,底层的HTTP或TCP / IP连接可能会成为一个问题,但你真的没有办法解决这个问题。

答案 5 :(得分:1)

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