2016-04-06 9 views
1

私はボタンをクリックすると最大サイズを5   MBと定義する方法を呼び出しています。しかしそれ以上のサイズをアップロードすると、サイズエラーメッセージが表示されません。ここに私のコードは次のとおりです。Fileuploadのサイズが5 MBを超えるとエラーメッセージが表示されない

public ActionResult document(HttpPostedFileBase file, Document model) 
{ 
    tbldocument doc = new tbldocument(); 
    //Document model = new Document(); 
    doc.DocumentName = model.documentname; 

    if (ModelState.IsValid) 
    { 
     if (file == null) 
     { 
      ModelState.AddModelError("File", "Please Upload Your file"); 
     } 
     else if (file.ContentLength > 0) 
     { 
      int MaxContentLength = 1024 * 1024 * 10; //10 MB 
      string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf", ".docx", ".doc", ".xml", ".odt", ".xlsx", ".ppt" }; 

      if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.')))) 
      { 
       ModelState.AddModelError("File", "Please file of type: " + string.Join(", ", AllowedFileExtensions)); 
      } 

      else if (file.ContentLength > MaxContentLength) 
      { 
       ModelState.AddModelError("File", "Your file is too large, maximum allowed size is: " + MaxContentLength + " MB"); 
      } 
      else 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       var path = Server.MapPath("~/App_Data/uploads/documents/" + model.projectid + ""); 
       //var pathFile = path + fileName; 
       if (!Directory.Exists(path)) 
       { 
        Directory.CreateDirectory(path); 
       } 
       var pathWithfileName = Path.Combine(path, fileName); 
       file.SaveAs(pathWithfileName); 
       ModelState.Clear(); 
       tbldocument objdb = new tbldocument(); 
       objdb.DocumentName = model.documentname; 
       objdb.ProjectId = model.projectid; 
       objdb.Path = model.path; 
       objdb.Path = Convert.ToString(pathWithfileName); 
       // objdb.FileName = file.FileName; 
       //objdb.FileName = file.FileName; 
       objdoc.upload(objdb); 
       //" + projectid + " 
       ViewBag.Message = "File uploaded successfully. File path : ~/Upload/" + fileName; 
      } 
     } 
    } 
    return RedirectToAction("ProjectTask", "TblTask"); 
} 

ここでスナップenter image description hereです。ファイルが完全にアップロードされるまでアップロードがIIS RAMに格納されているので

Enter image description here

+1

ありがとうございますEdit @Stephen Muecke –

+0

このメソッドは '[HttpPost]'とマークされていますか?そして、あなたのコードのどこにもあなたはリダイレクトされたビューしか返さないので、 'ModelSateError'と' ViewBag'プロパティを追加するのはちょっと意味がありません。 –

+1

代わりにモデルかファイルを返すべきですか?ユーザーがアップロードをクリックすると、同じページにないドキュメントリストまたはプロジェクトリストにリダイレクトされるので、リダイレクトします –

答えて

0

、IIS:代わりに、ファイルが5  メガバイトよりも小さくなければならない、それはのようなエラーをスローすることをユーザーにメッセージを表示しますあなたのメソッドを呼び出す前にファイルが大きすぎるときはbarfします。あなたは、アップロードされた大容量のファイルを好きなweb.configファイルに次のようなものを追加したい場合:

<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="104857600" /><!-- bytes --> 
     </requestFiltering> 
    </security> 
</system.webServer> 

そして、あなたはよりエレガントにこれらの「未処理」のエラーを処理したい場合は、Global.asaxの中Application_Errorメソッドを追加します。 cs。

+0

あなたはもっと詳しく説明できますか? –

+0

どの部分があなたを混乱させましたか? – robrich

+0

webconfigでコードをコピーしましたが、同じエラー –

0

ASP.NETのデフォルトの要求制限は、4MB(docs)です。

から:http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/

あなたはそのバージョンを使用している場合、それはあなたがする必要がある唯一の場所 ですので、また、ASP.NETランタイムは、 IIS 6でもを使用した(独自のファイルサイズ制限があります変更) - web.configのhttpRuntime要素の下にあります。

デフォルトでは4MB(4096kB)に設定されています。あなたが変更する必要があることにも (それはない前回とバイトにキロバイトに設定されています!):

<system.web> 
    <httpRuntime maxRequestLength="2097152" /> 
</system.web> 

それは覚えておく価値が、その要求の長さの制限が小さい 方の2つの構成要素のうち、優先されます。

さらに、IIS 7以降でアプリケーションをホストする場合は、maxAllowedContentLengthも調整することを忘れないでください(この設定はIISによって使用されます)。これのデフォルト値は30000000バイト(〜28.6 MB)(docs)です。

http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/ - この記事では、ASP.NETで大きなファイルを操作する方法を詳しく説明しています。

+1

didn @あなたはクリスチャンセンを知ることができますか私に正確に何ができるのか教えてください。 –

+0

' ...'はIIS 7+用です。あなたがWindows XPまたはServer 2003を使用している場合を除き、このソリューションはおそらくもうあなたを助けません。 – robrich

+0

@robrichご意見ありがとうございました:)私は、httpRuntimeがIIS 6以降であることを示すいくつかの文書があるのでしょうか?私が理解しているように、IIS 7+には独自の設定( 'maxAllowedContentLength')がありますが、ASP.NETは' maxRequestLength'に依存していますか?違いは、私が理解しているように、IIS 6はASP.NETと同じ設定を使用しています。私は間違っているかもしれません:) –

関連する問題