Когда я загружаю изображение, у меня была эта ошибка:
превышена максимальная длина запроса
Как я могу исправить эту проблему?
Когда я загружаю изображение, у меня была эта ошибка:
превышена максимальная длина запроса
Как я могу исправить эту проблему?
Добавьте в файл web.config следующее:
<configuration>
<system.web>
<httpRuntime maxRequestLength ="2097151"/>
</system.web>
</configuration>
Это устанавливает значение 2 ГБ. Не знаете, что такое max.
Вы можете увеличить максимальную длину запросов в web.config, под <system.web>
:
<httpRuntime maxRequestLength="100000" />
В этом примере устанавливается максимальный размер 100 Мб.
Это не потрясающий способ сделать это, поскольку вы в основном открываете свой сервер для DoS-атак, позволяя пользователям отправлять огромные файлы. Если вы знаете, что пользователь должен загружать только изображения определенного размера, вы должны применять это вместо того, чтобы открывать сервер для еще больших представлений.
Для этого вы можете использовать приведенный ниже пример.
Поскольку меня застонали за отправку ссылки, я добавил то, что в конечном итоге было реализовано с использованием того, что я узнал из ранее опубликованной ссылки, - и это было проверено и работает на моем собственном сайте... оно предполагает предел по умолчанию 4 Мб. Вы можете либо реализовать что-то подобное, либо использовать какой-то сторонний ActiveX.
Обратите внимание, что в этом случае я перенаправляю пользователя на страницу с ошибкой, если их представление слишком велико, но вам нечего мешать вам настраивать эту логику дальше, если вы этого пожелаете.
Надеюсь, это полезно.
public class Global : System.Web.HttpApplication {
private static long maxRequestLength = 0;
/// <summary>
/// Returns the max size of a request, in kB
/// </summary>
/// <returns></returns>
private long getMaxRequestLength() {
long requestLength = 4096; // Assume default value
HttpRuntimeSection runTime = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection; // check web.config
if(runTime != null) {
requestLength = runTime.MaxRequestLength;
}
else {
// Not found...check machine.config
Configuration cfg = ConfigurationManager.OpenMachineConfiguration();
ConfigurationSection cs = cfg.SectionGroups["system.web"].Sections["httpRuntime"];
if(cs != null) {
requestLength = Convert.ToInt64(cs.ElementInformation.Properties["maxRequestLength"].Value);
}
}
return requestLength;
}
protected void Application_Start(object sender, EventArgs e) {
maxRequestLength = getMaxRequestLength();
}
protected void Application_End(object sender, EventArgs e) {
}
protected void Application_Error(object sender, EventArgs e) {
Server.Transfer("~/ApplicationError.aspx");
}
public override void Init() {
this.BeginRequest += new EventHandler(Global_BeginRequest);
base.Init();
}
protected void Global_BeginRequest(object sender, EventArgs e) {
long requestLength = HttpContext.Current.Request.ContentLength / 1024; // Returns the request length in bytes, then converted to kB
if(requestLength > maxRequestLength) {
IServiceProvider provider = (IServiceProvider)HttpContext.Current;
HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
// Check if body contains data
if(workerRequest.HasEntityBody()) {
// Get the total body length
int bodyLength = 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(bodyLength - receivedBytes >= initialBytes) {
// Read another set of bytes
initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);
// Update the received bytes
receivedBytes += initialBytes;
}
initialBytes = workerRequest.ReadEntityBody(buffer, bodyLength - receivedBytes);
}
}
try {
throw new HttpException("Request too large");
}
catch {
}
// Redirect the user
Server.Transfer("~/ApplicationError.aspx", false);
}
}