上传大文件,有好几种方法:
1、思归的 HttpWorkerRequest 方法,太难,看不懂:-(
2、利用第三方的控件 AspNetUpload 要钱!!算了,咱还是喜欢免费的。
3、修改 web.config 文件,但是不能捕获错误。
4、通过 ftp 的方式上传。服务器需要提供 ftp 服务。
只有第三种方式合适!
修改 Webcong 文件:
<system.web>
<httpRuntime maxRequestLength="40690"
useFullyQualifiedRedirectUrl="true"
executionTimeout="6000"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>
</system.web>
其中与上传有密切关系的是:
maxRequestLength
指示 ASP.NET 支持的最大文件上载大小。
该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。
指定的大小以 KB 为单位。
默认值为 4096 KB (4 MB)。
executionTimeout
指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。
单位为秒,在上传大的文件时把这个设的大一些。
如果服务器内存
512M
,已可上传大小
160M
的文件。
到这里 web.config 的设置就已经结束。
可是一旦上传文件的大小超过了这个设置的文件大小范围就会发生如下错误:
该页无法显示
您要查看的页当前不可用。网站可能遇到技术问题,或者您需要调整浏览器设置。
虽然解决不了,那也要捕获这个错误啊!怎么办呢?
由于这个错误是由 file 控件引发的前台错误,所以在后台想利用 try...catch 来捕获是行不通的。
于是想到了利用.NET 的错误捕获页面的机制来处理。可行哦。
1、先设置 web.config
<customErrors mode="On"/>
2、新建一个 error.aspx 文件,专门用来捕获错误的。
3、在上传文件的 aspx 页面的前台页面里添加 page 指令。ErrorPage="UploadError.aspx"
4、在 error.aspx 中添加一些代码来判断错误信息是否是 file 引起的前台错误。
public class UploadError : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null)
{
Response.Redirect("../error.aspx");
}
else //前台错误 ex 为空值
{
Response.Redirect("uploadExcel.aspx?err=1"); //重新跳转到上传页面,加上 err 参数是为了显示错误信息
}
}
5、显示错误提示。
public class uploadexcel : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if (Request["err"] == "1")
{
Page.RegisterStartupScript("budget","<script language = javascript>alert('Upload file has failed ! File size is too large !')</script>");
}
}
}
6、搞定收工。
经过上述修改,现在的上传变成了,程序指定文件大小,如果超过,则弹出错误提示。
控件共享群 40662788 (满)
控件共享群1 45939285 (满)
控件共享群2 45939346
控件共享群3 45939415