你如何正确编写foreach循环来上传asp.net C中的多个文件#

时间:2014-10-20 02:10:25

标签: c# asp.net file-upload

我已经在很多网站上看到过这种风格的演示,作为在asp.net上传多个文件的一种方式,但我无法让它工作。如果我选择6个文件,它最终只保存一个文件,但标签显示6个同名文件名。当我调试时,它会像我希望的那样在每个循环上显示每个文件名。为什么不起作用?

另外,如果重要的话,我在页面上有一个更新面板。

我正在使用启用了多个上传的asp.net上传控件。我知道路径是正确的,因为当我只上传一个文件时它非常完美。

string Path = Request.Url.AbsolutePath;
string ProperPath = Path.Replace(@"Pages/InsertVideo.aspx", @"TrainingMaterial/Video/");

if (FileUpload1.HasFiles) { 
    //SaveFile(FileUpload1.PostedFile);

    foreach (HttpPostedFile File in FileUpload1.PostedFiles)
    {
        FileUpload1.SaveAs(System.IO.Path.Combine(Server.MapPath(ProperPath), FileUpload1.FileName));
        lblFilesUploaded1.Text += String.Format("{0}<br />", FileUpload1.FileName);
    }
}

我也尝试过这种技术,结果与上述相同。有什么建议?我认为它与我的SaveAs字符串有关。

foreach (string key in Request.Files)
{
    HttpPostedFile file = Request.Files[key];
    if (file.ContentLength != 0)
    {
        file.SaveAs(System.IO.Path.Combine(Server.MapPath(ProperPath), FileUpload1.FileName));
    }
}

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

if (FileUpload1.HasFiles)
{
    foreach (var file in FileUpload1.PostedFiles)
    {
        file.SaveAs(Path.Combine(Server.MapPath(ProperPath), file.FileName));
        lblFilesUploaded1.Text += String.Format("{0}<br />", file.FileName);
    }
}

在你的解决方案中,你在foreach中始终指的是FileUpload控件而不是当前上传的文件。