ASPを解決する.NET Core Mvcファイルアップロード制限の問題
3885 ワード
一、紹介
ASP.NET Core MVCでは、ファイルアップロードの最大アップロードファイルのデフォルトは20 MBで、比較的大きなファイルをアップロードしたい場合は、どのように設定するか分かりませんが、Webがありません.Config私たちはどのように手をつけるべきですか?
二、アップロードファイルのサイズを設定する
1.アプリケーション・レベルの設定
ファイルアップロードのサイズを60 MBに制限するには、ConfigureServicesメソッドに次のコードを追加する必要があります.public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.MultipartBodyLengthLimit = 60000000;
});
}
2.アクションレベルの設定
グローバル設定に加えて、Filterをカスタマイズすることで、単一アクションを制御することもできます.Filterコードは次のとおりです. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
{
private readonly FormOptions _formOptions;
public RequestFormSizeLimitAttribute(int valueCountLimit)
{
_formOptions = new FormOptions()
{
ValueCountLimit = valueCountLimit
};
}
public int Order { get; set; }
public void OnAuthorization(AuthorizationFilterContext context)
{
var features = context.HttpContext.Features;
var formFeature = features.Get();
if (formFeature == null || formFeature.Form == null)
{
// Request form has not been read yet, so set the limits
features.Set(new FormFeature(context.HttpContext.Request, _formOptions));
}
}
}
なぜならASP.NET Core MVCでは,以前のバージョンとは異なり,各種Feature(フィーチャー)に具体的な機能がカプセル化されており,HttpContextコンテキストは個々のフィーチャーを管理できるコンテナにすぎない.このFilterでは、Actionのみをブロックし、HttpContextのFormFeature(フォーム提出機能担当)を再設定し、特定のActionアップロードファイルのサイズを制限する目的を達成します.
三、結びの言葉
ファイルにアップロードされたバグを見つけたような気がしますが、バージョン1.0.1で修復されていることが確認されました.バージョン1.0.0で、アクションがIFRomFileをパラメータとして設定していない場合、Request.From.Filesはアクセスできず、例外を報告します.
GitHub:https://github.com/maxzhang1985/YOYOFxもし覚えていたら、スターの下で、一緒に交流することを歓迎します.
.NET Coreオープンソース学習グループ:214741894
1.アプリケーション・レベルの設定
ファイルアップロードのサイズを60 MBに制限するには、ConfigureServicesメソッドに次のコードを追加する必要があります.
public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.MultipartBodyLengthLimit = 60000000;
});
}
2.アクションレベルの設定
グローバル設定に加えて、Filterをカスタマイズすることで、単一アクションを制御することもできます.Filterコードは次のとおりです.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class RequestFormSizeLimitAttribute : Attribute, IAuthorizationFilter, IOrderedFilter
{
private readonly FormOptions _formOptions;
public RequestFormSizeLimitAttribute(int valueCountLimit)
{
_formOptions = new FormOptions()
{
ValueCountLimit = valueCountLimit
};
}
public int Order { get; set; }
public void OnAuthorization(AuthorizationFilterContext context)
{
var features = context.HttpContext.Features;
var formFeature = features.Get();
if (formFeature == null || formFeature.Form == null)
{
// Request form has not been read yet, so set the limits
features.Set(new FormFeature(context.HttpContext.Request, _formOptions));
}
}
}
なぜならASP.NET Core MVCでは,以前のバージョンとは異なり,各種Feature(フィーチャー)に具体的な機能がカプセル化されており,HttpContextコンテキストは個々のフィーチャーを管理できるコンテナにすぎない.このFilterでは、Actionのみをブロックし、HttpContextのFormFeature(フォーム提出機能担当)を再設定し、特定のActionアップロードファイルのサイズを制限する目的を達成します.