2012-09-20 10 views
9

もの:IIS7の場合最大アップロード長さIはすでにMVCでのアップロードサイズの制限について知っ

  1. あなたは最大アップロードサイズ
  2. ためmaxAllowedContentLengthmaxRequestLengthの両方を設定する必要が私は1つのプロパティがバイトである知っているし、他キロバイト
  3. にあなたは、私は200メガバイトのファイルを扱うことができるはずアップロードコンポーネントを持つ固定位置

を指定するには、locationプロパティを使用することができます。私はその1つのページごとにmaxlimitを200MBに設定する権利はないと思うので、動的リクエストURLを場所として使用したいと思う。

アップロードURLのルーティングパターンは、このようなものです:{dynamicvalue}/ConvertModule/Upload

(「ConvertModuleは」コントローラで、アクションである「アップロード」。)難しい部分は、私が設定カント、このため、{dynamicvalue}です固定場所はweb.configです。

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

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

あなたには2つの質問があります。あなたは最高の応答のためにそれらを別々に掲示したいかもしれません。 Q2の回答では、アップロードサイズを超えたときにサーバーからエラー応答が返されます。必要に応じて、その応答の特定のエラーページをアプリケーションに表示することができます。 –

+0

アップロード時間をweb.configで変更することを忘れないでください。基本的に2MBのファイルに設定されていると思います – Oedum

答えて

6

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

<location>ノードが動的URLをサポートしていないため、私は認識していません。しかし、あなたはurl rewrite moduleを使ってそれを欺くことができます。

それでは、あなたはファイルのアップロードを処理するコントローラを持っていると仮定してみましょう:

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]+$" } 
); 

OK、今みましょうセットアップ、次のウェブのルールを書き換えます。設定:

<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にできます書き換えます{dynamicvalue}/ConvertModule/UploadとURL書き換えモジュール:

<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にアップロードできます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など)でファイルサイズを確認できる場合は、帯域幅を無駄にしないようにします。

+0

この回答ありがとうございます!それは私が遭遇したすべての問題に対する答えを含んでいます。 – PcPulsar

関連する問題