【问题标题】:Multiple file upload duplicating one file many times多个文件上传多次复制一个文件
【发布时间】:2017-01-18 06:21:30
【问题描述】:

我正在尝试上传多个文件并在视图中遍历它们。但不是上传 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

【问题讨论】:

  • 您能从视图中发布您的 Html 吗?您是否还调试过代码并查看了 Request.Files 中的计数
  • 这可能听起来很疯狂,但请确保您不会在 UI 中将同一个文件上传 3 次
  • 抱歉,无法在 cmets 部分发布代码。现在是英国时间凌晨 1 点,所以我放弃了,明天再来!

标签: asp.net-mvc file-upload


【解决方案1】:

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

Using plupload with MVC3

希望对您有所帮助。

【讨论】:

  • 谢谢 Ben,是的,它已经过时了.. 选择了这种方法,因为它“只需要 5 分钟” :) 我欢迎任何建议,明天会查看链接,
【解决方案2】:

这可能无法回答您的问题,但它是上传文件的另一种方式。

试试这个:

[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

【讨论】:

  • HttpFileCollection 上的枚举器返回文件的键(名称),而不是 HttpPostedFile 对象。获取密钥后,使用 Item ([]) 属性和密钥(文件名)来获取 HttpPostedFile 对象。
猜你喜欢
  • 2011-05-28
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多