我正在尝试在我的MVC项目中上传文件,并且当我通过ajax将文件传递给控制器时,它无法正常工作。当我检查传递给控制器的HttpPostedFileBase对象时,文件中的所有内容均存在。我可以看到ReadTimeout和WriteTimeout都给出了错误“'file.WriteTimeout'引发了System.InvalidOperationException类型的异常”
我已经检出System.web并设置了timeout属性,并检查了文件是否在限制范围内。他们都很好。我确保我的post方法指定了enctype =“ form / multi-part data”。这似乎是我能找到的全部。任何建议将不胜感激。
在我看来,它是这样的:
@using (Html.BeginForm("UploadDocument", "ControllerName", new { id = Url.RequestContext.RouteData.Values["id"] }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<table class="table table-condensed">
<tr>
<th>Upload Document</th>
<td class="text-right">
@Html.TextBoxFor(m => m.File, new { type = "file" })
</td>
</tr>
</table>
<input class="pull-right btn btn-success btn-sm" type="submit"
name="btnSubmit" value="Upload" id="btnSubmit">
}
然后在控制器中:
[HttpPost]
public ActionResult UploadDocument(string id, HttpPostedFileBase file)
{
// Verify that the user selected a file
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
if (file != null)
{
if (model.File.ContentLength > 0)
{
var stream = file.InputStream;
var uploadResult = _client.module.Upload(custId, stream);
}
}
}
return RedirectToAction("NewAction", new { id = Guid.Parse(id) });
}
最后是webconfig:
<httpRuntime targetFramework="4.6.1" maxRequestLength="5120" executionTimeout="360"/>
fie应该作为HttpPostedFileBase参数的一部分传递,但事实并非如此,它只是在发出信号,并且我的API的本地版本显示流的参数为null,这是可以预期的,因为文件不是不能交给控制器。文件大小和类型都已传递,因此我确定这是超时问题。我用来测试的文件是1.2 MB和2MB。
任何帮助将不胜感激