多个文件上传多次复制一个文件

时间:2013-01-06 23:31:33

标签: asp.net-mvc file-upload

我正在尝试上传多个文件并在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

2 个答案:

答案 0 :(得分:0)

可能不是您要找的答案,但我会推荐一种不同的方法。那篇博文很老了。我使用plupload jquery plugin进行多文件上传。非常容易使用,非常容易实现。这是一个在另一个问题中发布的示例,介绍了如何使用MVC实现。在示例中,将为您尝试上载的每个文件调用Upload方法。

Using plupload with MVC3

希望有所帮助。

答案 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