10

MVC でのアップロード サイズの制限について、私が既に知っていること:

  1. maxAllowedContentLengthIIS7 の場合、とmaxRequestLength最大アップロード サイズの両方を設定する必要があります。
  2. 1 つのプロパティがバイト単位で、もう 1 つのプロパティがキロバイト単位であることを知っています
  3. location プロパティを使用して、固定の場所を指定できます

最大 200MB のファイルを処理できるアップロード コンポーネントがあります。maxlimitすべてのページを 200MBに設定する権利があるとは思わないので、動的なリクエスト URL を場所として使用したいと考えています。

アップロード URL のルーティング パターンは次のようになります。{dynamicvalue}/ConvertModule/Upload

(「ConvertModule」はコントローラで、「Upload」はアクションです。) 難しいのは{dynamicvalue}、このため、固定の場所を設定できないことですweb.config

セッションハイジャックのため、フラッシュアップロードなどを解決策として使用したくありません。

  • 質問 1 (私にとって最も重要): 指定したルーティング パターンのみにアップロード制限を設定する方法はありますか?
  • 質問 2 : アップロード サイズを超えたときにカスタム警告を表示することはできますか?
4

1 に答える 1

6

質問 1 : 与えられたルーティング パターンのみにアップロード制限を設定する方法はありますか?

<location>ノードが動的 URL をサポートしていないため、私が認識していることはありません。しかし、 URL 書き換えモジュールを使用してごまかすことができます。

ファイルのアップロードを処理するコントローラーがあるとします。

public class PicturesController
{
    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase file, int dynamicValue)
    {
        ...
    }
}

そして、このコントローラーに一致するように構成されたルートがあること:

routes.MapRoute(
    "Upload",
    "{dynamicvalue}/ConvertModule/Upload",
    new { controller = "Pictures", action = "Upload" },
    new { dynamicvalue = @"^[0-9]+$" }
);

では、web.config で次の書き換えルールを設定しましょう。

<system.webServer>
    <rewrite>
      <rules>
        <clear />
        <rule name="rewrite the file upload path" enabled="true">
          <match url="^([0-9]+)/ConvertModule/Upload$" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
          <action type="Rewrite" url="pictures/upload?dynamicvalue={R:1}" />
        </rule>
      </rules>
    </rewrite>
</system.webServer>

<location>これまでのところ、次のようにセットアップできますpictures/upload

<location path="pictures/upload">
    <system.web>
        <!-- Limit to 200MB -->
        <httpRuntime maxRequestLength="204800" />
    </system.web>
    <system.webServer>
        <security>
            <requestFiltering>
                <!-- Limit to 200MB -->
                <requestLimits maxAllowedContentLength="209715200" />
            </requestFiltering>
        </security>
    </system.webServer>
</location>

これで、次のパターンの URL にアップロードできます: {dynamicvalue}/ConvertModule/UploadURL 書き換えモジュールはそれを書き換えますpictures/upload?dynamicvalue={dynamicvalue}が、<location>タグは一致pictures/uploadし、制限を正常に適用します:

<form action="/123/ConvertModule/Upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">OK</button>
</form>

質問 2:アップロード サイズを超えたときにカスタム警告を表示することはできますか?

いいえ、制限をより大きな値に設定し、アップロード ハンドラ内でファイル サイズを確認する必要があります。また、クライアント (HTML5、Flash、Silverlight など) でファイル サイズを確認できる場合は、帯域幅の浪費を避けるために確認してください。

于 2012-09-20T08:53:38.823 に答える