我正在尝试上传多个文件并在View中迭代它们。但是,不是上传X个文件,而是多次上传第一个文件X(例如,如果我上传了3个文件,则为3次)。在目标文件夹中,只保存一个文件。
它似乎认识到存在的文件数量,那么为什么不通过它们进行迭代?
我应该提一下,我是asp.net / c#的新手(更习惯于经典/ vb),如果我遗漏了一些明显的东西,请道歉......
public class ViewDataUploadFilesResult
{
public string Name { get; set; }
public int Length { get; set; }
}
public ActionResult UploadMultipleFiles()
{
var r = new List<ViewDataUploadFilesResult>();
foreach (string file in Request.Files)
{
HttpPostedFileBase hpf = Request.Files[file];//as HttpPostedFileBase;
if (hpf.ContentLength == 0)
continue;
string basepath = Server.MapPath("/Images");
string savedFileName = Path.Combine(basepath, Path.GetFileName(hpf.FileName));
hpf.SaveAs(savedFileName);
r.Add(new ViewDataUploadFilesResult()
{
Name = savedFileName,
Length = hpf.ContentLength
});
}
return View(r);
}
<li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>
<li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>
<li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>
我一直在讨论Scott Hanselman的帖子:http://www.hanselman.com/blog/ABackToBasicsCaseStudyImplementingHTTPFileUploadWithASPNETMVCIncludingTestsAndMocks.aspx
答案 0 :(得分:0)
可能不是您要找的答案,但我会推荐一种不同的方法。那篇博文很老了。我使用plupload jquery plugin进行多文件上传。非常容易使用,非常容易实现。这是一个在另一个问题中发布的示例,介绍了如何使用MVC实现。在示例中,将为您尝试上载的每个文件调用Upload方法。
希望有所帮助。
答案 1 :(得分:-1)
这可能无法回答您的问题,但这是上传文件的另一种方式。
试试这个:
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
if (files != null && files.Count() > 0)
{
foreach (var uploadedFile in files)
{
if (uploadedFile.ContentType != "image/vnd.dwg")
{
return RedirectToAction("List");
}
var appData = Server.MapPath("~/app_data");
var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName));
uploadedFile.SaveAs(filename);
}
}
return RedirectToAction("Success");
}
并修改标记,以便文件输入命名为文件:
<input type="file" name="files" />
<input type="file" name="files" />
...// many inputs type file
“由Darin Dimitrov发布”,链接:Upload multiple files using HttpFileCollectionBase issue with C# and MVC3