代码之家  ›  专栏  ›  技术社区  ›  jason

提交后,在ASP.NET MVC上载文件代码中获取“服务器重置连接”错误

  •  16
  • jason  · 技术社区  · 16 年前

    我读过几个问题,解释了如何在asp.net mvc中处理文件上传。我试图提交文件以及描述它的表单字段。这可能是问题所在。我去写代码:

    查看代码:

    <% 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>
    
    <% } %>
    

    控制器代码:

    [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");            
    }
    

    我看过几个例子,但还没有遇到一个试图同时提交文件和其他表单数据的例子。另一些值得注意的是,其他示例似乎根本没有将httpverb属性放在action方法上,而是有一个空参数字符串。我希望接受的文件将是各种类型的视频文件,但它们可以是100-300 MB。我尝试使用的(本地)文件相对较小(50 MB左右)。

    我知道有人问过,但我觉得我的问题有点不同。当我提交页面时,我看到:

    连接已重置

    已重置与服务器的连接 当页面加载时。

    2 回复  |  直到 16 年前
        1
  •  25
  •   uvita    16 年前

    您在web.config中调整了maxrequestlength吗? 问题是请求大小大于您提供的值。将web.config的system.web config部分的httpruntime部分中的maxrequestlength更改为接受更大的值。

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

    您还必须注意超时值。

    祝你好运!.

        2
  •  0
  •   ZippyV    16 年前

    Web服务器上可能发生超时,因为发送文件花费的时间太长。检查Web服务器的设置。