Tôi nhận được lỗi vượt quá độ dài yêu cầu tối đa khi tôi đang cố tải lên video trong trang web của mình.
Làm thế nào để tôi sửa lỗi này?
Tôi nhận được lỗi vượt quá độ dài yêu cầu tối đa khi tôi đang cố tải lên video trong trang web của mình.
Làm thế nào để tôi sửa lỗi này?
Câu trả lời:
Nếu bạn đang sử dụng IIS để lưu trữ ứng dụng của mình, thì kích thước tệp tải lên mặc định là 4MB. Để tăng nó, vui lòng sử dụng phần bên dưới trong web.config
-
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
Đối với IIS7 trở lên, bạn cũng cần thêm các dòng dưới đây:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Lưu ý :
maxRequestLength
được đo bằng kilobytemaxAllowedContentLength
được đo bằng byte đó là lý do tại sao các giá trị khác nhau trong ví dụ cấu hình này. (Cả hai đều tương đương với 1 GB.)
Web.config
thay vì cài đặt trong Views
thư mục
Tôi không nghĩ rằng nó đã được đề cập ở đây, nhưng để nó hoạt động, tôi đã phải cung cấp cả hai giá trị này trong web.config:
Trong system.web
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
Và trong system.webServer
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
QUAN TRỌNG : Cả hai giá trị này phải phù hợp. Trong trường hợp này, tải lên tối đa của tôi là 1024 megabyte.
maxRequestLpm có 1048576 KILOBYTES và max ALLowedContentLpm có 1073741824 BYTES .
Tôi biết điều đó là hiển nhiên, nhưng nó dễ dàng bỏ qua.
web.config
tệp gốc của dự án .
Có thể đáng lưu ý rằng bạn có thể muốn giới hạn thay đổi này đối với URL mà bạn mong đợi sẽ được sử dụng để tải lên thay vì toàn bộ trang web của bạn.
<location path="Documents/Upload">
<system.web>
<!-- 50MB in kilobytes, default is 4096 or 4MB-->
<httpRuntime maxRequestLength="51200" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- 50MB in bytes, default is 30000000 or approx. 28.6102 Mb-->
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>
</system.webServer>
</location>
Và chỉ trong trường hợp ai đó đang tìm cách xử lý ngoại lệ này và hiển thị một lời giải thích có ý nghĩa cho người dùng (đại loại như "Bạn đang tải lên một tệp quá lớn"):
//Global.asax
private void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
var httpException = ex as HttpException ?? ex.InnerException as HttpException;
if(httpException == null) return;
if (((System.Web.HttpException)httpException.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
//handle the error
Response.Write("Too big a file, dude"); //for example
}
}
(Yêu cầu ASP.NET 4 trở lên)
HttpContext.Current.ClearError()
cần thiết để cho phép Response.Redirect()
hoạt động đúng. Về mặt web.config
nó hoạt động chỉ với maxRequestLength
thuộc tính của httpRuntime
.
onchange
sự kiện trên nút tải lên và so sánh kích thước tệp tải lên với giới hạn tải lên tối đa.
Nếu bạn không thể cập nhật tệp cấu hình nhưng kiểm soát mã xử lý tải lên tệp, hãy sử dụng HttpContext.Current.Request.GetBufferlessInputStream(true)
.
Các true
giá trị chodisableMaxRequestLength
tham số nói với khuôn khổ để bỏ qua giới hạn yêu cầu cấu hình.
Để biết mô tả chi tiết, hãy truy cập https://msdn.microsoft.com/en-us/l Library / hh195568 (v = vs.110) .aspx
Để tóm tắt tất cả các câu trả lời ở một nơi duy nhất:
<system.web>
<httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Quy tắc:
Ghi chú:
thêm thông tin MSDN
maxRequestLpm (length in KB) Ở đây là ex. Tôi đã lấy 1024 (1MB) max ALLowedContentLpm (chiều dài tính bằng byte) phải giống với maxRequestLpm của bạn (1048576 byte = 1MB).
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
</system.webServer>
Nếu bạn có một yêu cầu đến một ứng dụng trong trang web, hãy đảm bảo bạn đặt maxRequestLpm trong web.config gốc. MaxRequestLpm trong web.config của ứng dụng dường như bị bỏ qua.
httpRuntime maxRequestLength="###
và requestLimits maxAllowedContentLength
trong cấu hình web ở cấp gốc, không phải ở cấp ứng dụng phụ.
Tôi đã bị vấp ngã bởi thực tế là tệp web.config của chúng tôi có nhiều phần system.web: nó hoạt động khi tôi thêm <httpR.78 maxRequestL wavel = "1048576" /> vào phần system.web ở mức cấu hình.
Tôi đã phải chỉnh sửa C:\Windows\System32\inetsrv\config\applicationHost.config
tập tin và thêm <requestLimits maxAllowedContentLength="1073741824" />
vào cuối ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
phần.
applicationHost.config
.
Tôi có thể thêm vào cấu hình web không biên dịch
<system.web>
<httpRuntime maxRequestLength="1024" executionTimeout="3600" />
<compilation debug="true"/>
</system.web>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1048576"/>
</requestFiltering>
</security>
executionTimeout
thuộc tính không có gì để làm với những gì được yêu cầu, và cũng như thế với compilation
thẻ.