我正在ASP.NET中设计文件服务器应用程序。我必须上传大小为100MB的文件,然后将其保存到varbinary(max)
中的SQL Server 2008数据库中。必须在DB中保存文件。我正在使用FileUpload
控件。请建议我如何处理这么大的文件?
更新
任何代码示例都会有很大的帮助,任何代码示例?
如何以块的形式读取文件?
答案 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)
多年前(在ASP 1.1中),我使用了这个控件,它很棒。
请参阅 http://krystalware.com/Products/SlickUpload/
http://krystalware.com/Products/SlickUpload/Documentation/concepts/uploading-sql-server.aspx
答案 4 :(得分:1)
因为您使用SQL Server 2008,其varbinary
列的最大值为2gb,所以您应该没问题。任何常规上传脚本都可能有效。当你进入那个大小的上传时,底层的HTTP或TCP / IP连接可能会成为一个问题,但你真的没有办法解决这个问题。
答案 5 :(得分:1)
将其分成几部分,为每个部分分配序列号,在服务器端接收文件(假设DB在那里)收集,根据序列号对部分进行排序,并通过剥离序列号重新加入它们。希望你不会超时,如果这是唯一的问题!也许你可以用你的TPL上传多个部分并以同样的方式重新加入它们!