我创建了mvc项目并希望上传文件。我在web.config中注册了
<httpRuntime maxRequestLength="2000"/>
<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="address here"> </ customErrors>, in Index.aspx <% using (Html.BeginForm ("upload", "home", FormMethod.Post,
new {enctype = "multipart / form-data"})) {%>
<label for="file"> Filename: </ label>
<input type="file" name="file" id="file" />
<input type="submit" />
<%}%>
在HomeController.cs
中[HttpPost]
public ActionResult Upload (HttpPostedFileBase file)
{
if (file! = null & & file.ContentLength> 0)
{
if (file.ContentLength> 4096000)
{
return RedirectToAction ("FileTooBig");
}
var fileName = Path.GetFileName (file.FileName);
var path = Path.Combine (Server.MapPath ("~ / App_Data / uploads"), fileName);
file.SaveAs (path);
}
return RedirectToAction ("Index");
}
如果我附加超过2兆字节的文件,DefaultRedirect在Opera中完美运行,但在Chrome和IE中无效。我还在global.asax中的Application_Error()事件中使用了Response.Redirect(“address here”)。它在Chrome和IE中也不起作用。我该怎么办?
答案 0 :(得分:1)
maxRequestLength以千字节(KB)为单位。您的设置为2000KB(略小于2MB,因为1MB中有1024KB)。
我不确定为什么它在某些浏览器而不是其他浏览器中运行,除非有些正在压缩整个上传内容而其他浏览器没有(我认为HTTP 1.1支持)。
HTH, 布赖恩
答案 1 :(得分:1)
试试这个。该片段经过测试并按预期工作。将来尽量不要将var类型用于字符串变量。 var是一种动态类型,应该适用于所有文件类型 - 包括数组。但尝试具体说明文件类型有助于减少错误。
我通常将公共文件保存在公用文件夹中。因此,将其更改为您的文件夹(例如App_Data)
[HttpPost]
public ActionResult test(HttpPostedFileBase file)
{
if (file.ContentLength> 4096000)
{
return RedirectToAction ("FileTooBig");
}
string fileName = Path.GetFileName(file.FileName);
string uploadPath = Server.MapPath("~/Public/uploads/" + fileName);
file.SaveAs(uploadPath);
return View("Index");
}
祝你好运
答案 2 :(得分:1)
无法阻止文件上传。 IIS在将其传递给ASP.NET堆栈之前接收整个HTTP请求正文。这包括您的多部分表单帖子的所有部分。因此,ASP.NET实际上没有机会通过检查file.ContentLength
属性来中断文件上传。
您可以编写自定义HTTP模块来检查文件大小,但在接收整个请求之前中止或关闭响应会导致响应为空。意思是没有办法优雅地失败。
我的建议是在实现HTTP模块时将文件上传到隐藏的iframe中。这样一来,如果出现问题,你的主页就不会破坏。
每个人都可以和我一起感谢微软这个令人敬畏的“功能”(在讽刺中排队)。
感谢微软。感谢。
答案 3 :(得分:0)
然后尝试使用if-the-else。这个片段有用。如果你喜欢,请投票给我。
[HttpPost]
public ActionResult test(HttpPostedFileBase file)
{
if (file.ContentLength > 400)
{
return RedirectToAction("GeneralError", "Error");
}
else
{
string fileName = Path.GetFileName(file.FileName);
string uploadPath = Server.MapPath("~/Public/uploads/" + fileName);
file.SaveAs(uploadPath);
return View("Index");
}
}
需要两个输入按钮: 用于浏览文件: 提交文件:
祝你好运!