我使用asp.net 4.5和MVC 5构建了一个网站。 在我的一个视图中,我想上传多个文件。 使用下面的代码,收集并保存第一个文件,但保存的次数与我尝试上传的文件数一样多。
例如: 我用文件上传器选择文件 pic1.jpg 和 pic2.jpg 。这导致文件 pic1.jpg 被保存两次。
调试时我发现Request.Files[file];
代码每次都返回相同的文件。似乎我得到了两次相同的文件上传器,并且只选择了第一个文件。
如何更改代码以获取通过上传器选择的所有文件?
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ProductViewModel product)
{
...
foreach (string file in Request.Files)
{
var hpf = Request.Files[file];
if (hpf != null && hpf.ContentLength > 0)
{
var savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(hpf.FileName));
hpf.SaveAs(savedFileName);
}
}
...
return RedirectToAction<ProductController>(x => x.Index());
}
查看
@model EVRY.OrderCapture.Administration.ViewModels.ProductViewModel
<h2>@Resources.Resources.Create</h2>
@using (Html.BeginForm("Create", "Product", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
...
<div class="form-group">
<label for="fileUpload" class="control-label col-md-2">Filename:</label>
<div class="col-md-10">
<input type="file" name="files" id="fileUpload" multiple />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="@Resources.Resources.Create" class="btn btn-default" />
</div>
</div>
</div>
}
答案 0 :(得分:4)
我自己找到了答案。 我必须选择索引而不是名称。
for (var i = 0; i < Request.Files.Count; i++)
{
var hpf = Request.Files[i];
if (hpf != null && hpf.ContentLength > 0)
{
var savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(hpf.FileName));
hpf.SaveAs(savedFileName);
}
}