Asp.netコア2.0でファイルをアップロードできるWebサイトを作成しています。すぐに30MB
アップロード制限の問題に遭遇し、サーバーから404
応答を受け取りました。この制限以下では、すべてが正常に動作します。
私はこのような多くの解決策をウェブ上で見つけました: Asp.Netコアのアップロードファイルサイズを増やす 。私の問題は、このソリューションを機能させることができず、404
を超えても30MB
の応答が得られることです。
私の呼び出しはajaxの呼び出しで、次のようになります。
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++) {
if (files[idx].size < 1074790400) {
data.append("fileImage" + idx, files[idx]);
} else {
BootstrapDialog.show({
type: BootstrapDialog.TYPE_WARNING,
title: "Validation Error",
message: "The maximum file size for images is 1GB. Please resize your image and upload again.",
buttons: [
{
label: "OK",
action: function(dialogItself) {
dialogItself.close();
}
}
]
});
}
}
$.ajax({
url: "/api/article/uploadfile/" + type,
type: "POST",
processData: false,
contentType: false,
dataType: false,
data: data,
success: function(jsonData) {
refreshUploadedImages(jsonData, isPhoto);
}
});
}
}
function rotateImageAnticlockwise(element) {
var id = $(element).attr("data-id");
var mediaData = getMediaData(id, true);
$.ajax({
url: "/api/article/rotateMedia/a/p/" + mediaData.fileId + "/" + mediaData.rotation,
type: "POST",
processData: false,
contentType: false,
success: function(jsonData) {
refreshRotatedImage(jsonData);
}
});
}
次に、私のサーバー側メソッドには次のような属性があります。
[HttpPost]
[RequestSizeLimit(1074790400)]
[Route("api/article/uploadfile/{mediaType}")]
public async Task<IActionResult> UploadFile(string mediaType)
誰かが私が間違っていることを見ることができますか?これは私を怒らせています!!!
同じ問題を抱えている他の人にとっては、これが答えです。
Mark LaFleurの答えは正しい方向でしたが、web.configには重要なセクションがありませんでした。
私は助けられましたが、Asp.net Coreのweb.configファイルの詳細を説明するこのWebページ: ASP.NET Core Module configuration reference
このエラーを停止するには、次の内容のweb.configファイルを作成する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<security>
<requestFiltering>
<!-- This will handle requests up to 50MB -->
<requestLimits maxAllowedContentLength="52428800" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
RequestSizeLimit
属性を使用すると、コード内で最大リクエストサイズを定義できますが、サーバー自体がサポートする最大リクエストサイズによって制限されます。
この場合、このエラーが表示されていると思います。
HTTP 404.13 - Not Found
The request filtering module is configured to deny a request that exceeds the request content length.
このエラーは、ISSによってトリガーされています。これは、呼び出しがIISのmaxAllowedContentLength
値を超えたためです(デフォルトは30,000,000
です)。 ドキュメント から:
次のエラーは、ファイルのアップロードがサーバーの構成済み
maxAllowedContentLength
を超えていることを示しています。デフォルト設定は30000000
で、約28.6MB
です。web.config
を編集して、値をカスタマイズできます。<system.webServer> <security> <requestFiltering> <!-- This will handle requests up to 50MB --> <requestLimits maxAllowedContentLength="52428800" /> </requestFiltering> </security> </system.webServer>