2010-03-06 3 views
16

Ich habe mehrere Fragen zu lesen, wie mit Datei-Uploads in asp.net mvc umzugehen. Ich versuche, sowohl die Datei als auch die Formularfelder, die es beschreiben, einzureichen. Das könnte das Problem sein. Ich werde den Code gehen schreiben:Erhalten von 'Verbindung zurückgesetzt von Server' Fehler in asp.net MVC-Upload-Datei-Code nach dem Senden

anzeigen Code:

<% using (Html.BeginForm("CreateFile", "Video", FormMethod.Post, new { enctype = "multipart/form-data" })) 

    {%> 

    <fieldset> 
     <legend>Fields</legend> 
     <p> 
      <label for="file">Filename:</label> 
      <input type="file" name="file" id="file" />    
     </p> 
     <p> 
      <label for="Password">Password:</label> 
      <%= Html.TextBox("Password")%> 
      <%= Html.ValidationMessage("Password", "*")%> 
     </p> 
     <p> 
      <label for="Description">Description:</label> 
      <%= Html.TextBox("Description")%> 
      <%= Html.ValidationMessage("Description", "*")%> 
     </p> 
     <p> 
      <label for="DateUploaded">DateUploaded:</label> 
      <%= Html.TextBox("DateUploaded")%> 
      <%= Html.ValidationMessage("DateUploaded", "*")%> 
     </p> 
     <p> 
      <label for="DateRecorded">DateRecorded:</label> 
      <%= Html.TextBox("DateRecorded")%> 
      <%= Html.ValidationMessage("DateRecorded", "*")%> 
     </p> 
     <p> 
      <input type="submit" value="Submit" /> 
     </p> 
    </fieldset> 

<% } %> 

Controller-Code:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult CreateFile(VideoDTO video, HttpPostedFileBase f) //[Bind(Exclude="VideoId")] 
{    
    foreach (string file in Request.Files) 
    { 
     HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
     if (hpf.ContentLength == 0) 
      continue; 
     string savedFileName = Server.MapPath("Videos") + Path.GetFileName(hpf.FileName); 

     hpf.SaveAs(savedFileName); 
     video.FileName = hpf.FileName; 
    } 

    repository.CreateVideo(video); 
    return RedirectToAction("Index");    
} 

ich einige Beispiele gesehen haben, aber sind nicht gekommen, über eine, die versucht, um sowohl eine Datei als auch andere Formulardaten einzureichen. Einige andere bemerkenswerte Dinge sind andere Beispiele, die anscheinend kein HttpVerb-Attribut für die Aktionsmethode bereitstellen und eine leere Parameterzeichenfolge haben. Die Dateien, die ich akzeptieren möchte, sind Videodateien verschiedener Typen, aber sie können irgendwo zwischen 100 und 300 MB liegen. Die Dateien, die ich (lokal) verwenden wollte, waren vergleichsweise klein (50 oder so mb).

Ich weiß, es wurde gefragt, aber ich fühle mich wie mein Problem hier irgendwie anders ist. Wenn ich die Seite einreichen Ich sehe:

Die Verbindung wurde zurückgesetzt wurde

Die Verbindung zum Server zurückgesetzt , während die Seite geladen wurde.

+0

Wird der Controllercode ausgeführt? – ZippyV

+0

Nun, da Sie es erwähnen, tut es das nicht. Ich habe mehrere Haltepunkte, aber keiner von ihnen wird jemals erreicht. Wenn ich den Eingangstyp = Datei-Teil der Ansicht entferne, läuft der Code gut und der Controller-Teil ist erreicht. – jason

+1

BTW, es ist "ASP.NET", ein Wort. –

Antwort

25

Haben Sie die maxRequestLength in der web.config abgestimmt? Das Problem besteht darin, dass die Anforderungsgröße größer als der von Ihnen angegebene Wert ist. Ändern Sie die maxRequestLength im Abschnitt httpRuntime des Abschnitts system.web config in Ihrer Datei web.config, um größere Werte zu akzeptieren.

<System.Web> 
    <httpRuntime maxRequestLength="value in kilobytes" /> 
</System.Web> 

Sie müssen auch auf den Timeout-Wert achten.

Viel Glück !.

+0

Das war das Problem. Vielen Dank! – jason

0

Es konnte ein Timeout auf dem Webserver auftreten, da das Senden der Datei zu lange dauert. Überprüfen Sie die Einstellungen Ihres Webservers.

+1

Diese Nachricht erfolgt unmittelbar nach dem Senden. Es ist buchstäblich Millisekunden später. – jason

Verwandte Themen