web-dev-qa-db-ja.com

.net Core 2.0ファイルのアップロードサイズの制限

.net core 2.0 MVC Webアプリで大きなファイルをアップロードするときに問題が発生します。

.net core 2.0でファイルサイズの制限を増やす方法を示す、この記事のような記事を見てきました。 Kestrelでアップロードリクエストの長さ制限を増やす

したがって、例に従って、両方のオプションを試しました。私は現在、これを私のProgram.csに持​​っています:

        public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseKestrel(options => options.Limits.MaxRequestBodySize = null)
            .Build();

...そしてコントローラ上の私のajaxファイルのアップロード方法は次のようになります:

    [HttpPost]
    [RequestSizeLimit(1_074_790_400)]
    [Route("api/article/uploadfile/{mediaType}")]
    public async Task<IActionResult> UploadFile(string mediaType)

Request.Form.Filesを使用してアップロードしたファイルにアクセスします

ビューのJavaScriptは次のようになります。

$('#upload-videos').change(function () {
    var files = $("#upload-videos").get(0).files;
    uploadMedia(false, files);
})

function uploadMedia(isPhoto, files) {
    var type;
    if (isPhoto) {
        type = "i";
    }
    else {
        type = "v";
    }

    var data = new FormData();
    if (files.length > 0) {
        for (idx = 0; idx < files.length; idx++) {
                data.append("fileImage" + idx, files[idx]);
        }

        $.ajax({
            url: "/api/article/uploadfile/" + type,
            type: "POST",
            processData: false,
            contentType: false,
            dataType: false,
            data: data,
            success: function (jsonData) {
                refreshUploadedImages(jsonData, isPhoto);
            }
        });
    }
}

問題は、アップロード制限を増やすための変更があっても、応答が得られることです。

リソースの読み込みに失敗しました:サーバーは500()のステータスで応答しました

コントローラーメソッドの最初の行にブレークポイントを設定すると、ブレークポイントがヒットしないため、このコードに問題がないように見えます。

ファイルサイズが小さい場合はすべて正常に動作しますが、サイズが538,286 KBのファイルをアップロードしようとすると失敗します。

誰かがこれを手伝ってくれる?

更新:詳細については、RequestSizeLimitの設定に関係なく、アップロードファイルのサイズが122,211 KBから137,840 KBの間である場合に問題が発生するようで、エラーが常に発生します。

更新2:すべての.netコアとすべての.netコアnugetパッケージを2.1に更新しましたが、問題はまだ残っています。

9
Slade

同じ問題で他の人を助けるために、私はここで答えを見つけました: ASP.MVC CORE Webサイトの最大アップロードサイズ

次のように、ボディの長さの制限を削除する必要があることがわかります。

services.Configure<FormOptions>(x => x.MultipartBodyLengthLimit = 1_074_790_400);

FormOptionsMicrosoft.AspNetCore.Http.Features名前空間にあります。

4
Slade

この問題を解決するには、代わりにこのコードを使用できます[RequestSizeLimit(1_074_790_400)]

[DisableRequestSizeLimit]

1
Pericles Radael