Monday, July 20, 2009

ASP NET max file size check

This is the code below to redirect the same page if “Max Request Length Exception” occur. Just write this code on global.asax.

If the page content size is greater than maxRequestLength then this code redirect the page to the same page with query string action=exception. Just read this query string value and show the proper message the client browser.

protected void Application_BeginRequest(Object sender, EventArgs e)

{

HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime");

//Approx 100 Kb(for page content) size has been deducted because the maxRequestLength proprty is the page size, not only the file upload size

int maxRequestLength = (runTime.MaxRequestLength - 100) * 1024;

//This code is used to check the request length of the page and if the request length is greater than

//MaxRequestLength then retrun to the same page with extra query string value action=exception

HttpContext context = ((HttpApplication)sender).Context;

if (context.Request.ContentLength > maxRequestLength)

{

IServiceProvider provider = (IServiceProvider)context;

HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));

// Check if body contains data

if (workerRequest.HasEntityBody())

{

// get the total body length

int requestLength = workerRequest.GetTotalEntityBodyLength();

// Get the initial bytes loaded

int initialBytes = 0;

if (workerRequest.GetPreloadedEntityBody() != null)

initialBytes = workerRequest.GetPreloadedEntityBody().Length;

if (!workerRequest.IsEntireEntityBodyIsPreloaded())

{

byte[] buffer = new byte[512000];

// Set the received bytes to initial bytes before start reading

int receivedBytes = initialBytes;

while (requestLength - receivedBytes >= initialBytes)

{

// Read another set of bytes

initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);

// Update the received bytes

receivedBytes += initialBytes;

}

initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes);

}

}

// Redirect the user to the same page with querystring action=exception.

context.Response.Redirect(this.Request.Url.LocalPath + "?action=exception");

}

}

No comments:

Post a Comment