我正在尝试限制用户在特定网页上上传文件的大小。我使用web.config
完成了这样做:
<location path="SubSection/TestPage">
<system.web>
<httpRuntime maxRequestLength="2048" />
</system.web>
</location>
但是,当出现此错误时,会将用户带到其中一个ASP.NET黄色错误页面。现在我知道可以创建自定义错误页面,我已经研究过了,但它们仍然涉及重定向浏览器。
这仅仅是为了尝试通知用户他们正在尝试上传过大的文件,而不将其导航到他们当前所在的页面。是否可以阻止此TestPage重定向到黄色错误页面,而是显示某种类型的JavaScript弹出窗口?
我试图在Application_Error()
文件中的global.asax
方法中处理错误,但遗憾的是,无论我在其中执行什么操作,它总是会在此方法完成后重定向。我尝试通过此页面显示JavaScript弹出窗口也没有成功,虽然我的理解是这在global.asax
文件中实际上是可行的,所以我认为我只是在那里做错了。
这是我根据here接受的答案处理Application_Error()
的代码,其中JavaScript部分基于this。
void Application_Error(object sender, EventArgs e)
{
int TimedOutExceptionCode = -2147467259;
Exception mainEx;
Exception lastEx = Server.GetLastError();
HttpUnhandledException unhandledEx = lastEx as HttpUnhandledException;
if (unhandledEx != null && unhandledEx.ErrorCode == TimedOutExceptionCode)
{
mainEx = unhandledEx.InnerException;
}
else
mainEx = lastEx;
HttpException httpEx = mainEx as HttpException;
if (httpEx != null && httpEx.ErrorCode == TimedOutExceptionCode)
{
if(httpEx.StackTrace.Contains("GetEntireRawContent"))
{
System.Web.UI.Page myPage = (System.Web.UI.Page)HttpContext.Current.Handler;
myPage.RegisterStartupScript("alert","<script language=javascript>alert('The file you attempted to upload was too large. Please try another.');</script" + ">");
Server.ClearError();
}
}
}
最后,我还根据this接受的答案在用户控件本身(位于VB.NET
)中尝试了以下代码:
Private Sub Page_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim err As Exception = Server.GetLastError()
Dim cs As ClientScriptManager = Page.ClientScript
If (cs.IsStartupScriptRegistered(Me.GetType(), "testJS") = False)
Dim cstext1 As String = "alert('" & err.Message & "');"
cs.RegisterStartupScript(Me.GetType(), "testJS", cstext1, True)
End If
End Sub
不幸的是,这段代码似乎根本没有被调用。
重申一下,这只是为了处理一个简单的用户错误,即上传一个稍微过大的文件。我不想重定向并丢失用户在原始页面上可能做的其他事情,我只想显示一个简单的JavaScript警告框。可以这样做吗?
答案 0 :(得分:0)
您可以在java脚本中获取文件大小,如下所示。
var fileSize = document.getElementById("myfileUploader").files[0].size; //gives size in bytes.
if(fileSize > 2097152) //2038Kb = 2038*1024 bytes
{
alert("File size exceded");
return false;
}
答案 1 :(得分:0)
您可以使用AJAX发送请求并处理错误响应,以指示文件太大。例如,使用jQuery:
$.ajax("/my/upload/action",
{
type: "POST",
data-type: "xml",
data: serializeFilesAsXML();
success: function() {
alert("Your files were uploaded!");
}
error: function(jqXHR, textStatus, errorThrown) {
if(errorThrown == "Files Too Large") {
alert("Your files were too large.");
} else {
alert("There was an error uploading your files. Please try again.");
}
}
}
);
您可能需要重写上传文件的操作,以便它响应AJAX请求并发送相应的失败消息。