ASP.NET C#FileUpload.SaveAs(filename)用于大文件

时间:2013-06-28 12:31:25

标签: c# asp.net upload webserver large-files

我正在尝试使用ASP.Net中的FileUpload控件将文件上传到服务器。我希望能够上传超过1GB的文件,并且可能永远不会超过2GB。目前我有这个上传代码:

string filename = FileUpload1.PostedFile.FileName;
filename = filename.Remove(filename.Count() - 4) + "-" + DateTime.Now.ToShortDateString() + ".zip";
filename = filename.Replace(" ", "-");
filename = filename.Replace("/", "-");

//attempt to save the file
FileUpload1.SaveAs("C:\\Uploads\\" + filename);

我得到的错误是服务器在尝试上传文件很长时间后超时。我已经阅读了很多,并发现了许多建议,我的web.config现在看起来像这样:

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" maxRequestLength="999999999" executionTimeout="100000000" />
  <customErrors mode="Off"/>
</system.web>
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="4000000000"/>
    </requestFiltering>
  </security>
</system.webServer>

我不想使用已经编写的工具,例如。 NeatUpload,因为我真的想让这个当前的代码工作。如果有人有任何建议,或想了解更多详情,请告诉我,谢谢。

1 个答案:

答案 0 :(得分:1)

我理解你希望获得&#34;你的&#34;代码工作,但你真的在使用ASP.NET FileUpload控件来上传你所说的大小的文件。我相信,即使你开始工作,当有人开始上传1GB +大小的文件时,你也不会满意你的网站的内存使用情况或响应能力,更不用说多人了。

我认为你的更好的开发工作可能是一个自定义的HTTP处理程序,它可以对文件进行分块并上传更易于管理的部分,因为HTTP从未设计用于执行大规模文件传输,这是大多数(几乎全部)免费和开放的原因ASP.NET FileUpload的源代码替代方法是使用一个HTTP处理程序来整理文件或浏览器扩展(Flash,Silverlight等)来托管发送到服务器的块。

NeatUpload是CodePlex - NeatUpload

开源的