我读过几个问题,解释了如何在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左右)。
我知道有人问过,但我觉得我的问题有点不同。当我提交页面时,我看到:
连接已重置
已重置与服务器的连接
当页面加载时。