我可以使用:
<input type="file" name="files" id="files" multiple="multiple" />
并将其绑定到:
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
...
}
我正在为现代浏览器编写一个Web应用程序,不必担心IE,所以我想避免使用Flash。当我发布表单时,现在files
始终为空。有没有办法让它在MVC 3中运行?
谢谢!
答案 0 :(得分:13)
您的表单中是否正确设置了编码?
我相信你还需要:
new { enctype = "multipart/form-data" }
在表单声明中,以确保浏览器可以发布文件。
例如:
@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
答案 1 :(得分:1)
不会使用Request.Files来实现向后兼容性,如下所示:
public ActionResult UploadFiles()
{
string UpoadedFilesFolder = "YourServerFolder";
string fileName ="";
byte[] fileData=null;
foreach (HttpPostedFileBase uf in Request.Files)
{
HttpPostedFileBase UpoadedFile = uf;
if (uf.ContentLength > 0)
{
fileName = Path.GetFileName(UpoadedFile.FileName);
using (BinaryReader br = new BinaryReader(UpoadedFile.InputStream))
{
fileData = br.ReadBytes((int)UpoadedFile.InputStream.Length);
}
using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath(UpoadedFilesFolder), fi.FileName), FileMode.Create))
{
fs.Write(fileData, 0, fileData.Length);
}
}
}
return Content("OK");
}
答案 2 :(得分:0)
我的索引视图:
@using (Html.BeginForm("Upload","home", FormMethod.Post,new { enctype = "multipart/form-data" }))
{
<input type="file" name="files" value=" " multiple="multiple" />
<input type="submit" name="btUpload" value="Upload" />
}
在控制器中
public ActionResult Upload(HttpPostedFileBase[] files)
{
TempData["Message"] = files.Count();
return RedirectToAction("Index");
}
文件包含上传的文件 - 对我来说很好用!
答案 3 :(得分:0)
这不起作用:
foreach (HttpPostedFileBase uf in Request.Files)
{
HttpPostedFileBase UpoadedFile = uf;
}
应该这样做:
for (int i=0; i<Request.Files.Count; i++)
{
HttpPostedFileBase UpoadedFile = Request.Files[i];
}