在服务器站点上传多个文件/访问输入ID

时间:2010-08-02 10:35:53

标签: asp.net-mvc-2 file-upload

我正在尝试上传几个文件。上传本身适用于单个上传,但我无法弄清楚如何访问元素名称以确保每个上传都分配到正确的字段。 HttpPostedFileBase似乎不再包含该类型的信息。

public ActionResult Edit(int id, FormCollection collection) {
    Report report = re.GetReport(id);
    var fileNames = new List<string>();

    foreach (string file in Request.Files) {
        var postedFile = Request.Files[file] as HttpPostedFileBase;
        if (postedFile.ContentLength == 0)
            continue;
        fileNames.Add(UploadFile(basedir, postedFile));
    }

    // Rather than guessing which is which I'd like to get the field name or id.
    report.Image = fileNames[0];
    report.File = fileNames[1];

    UpdateModel(report, "report");
    rep.Save();

在视图中我有

<%: Html.LabelFor(model => model.report.Image)%>
<input id="report_Image" type="file" name="Image" />  

<%: Html.LabelFor(model => model.report.File)%>
<input id="report_Image" type="file" name="File" />   

谢谢, 达菲

3 个答案:

答案 0 :(得分:0)

Phil Haack blogged最近关于这一点,也许他的例子会有所帮助。

您还可以查看文件的扩展名以确定它是哪个文件。

你能使用Request.Files [“File”]和Request.Files [“Image”]吗?

答案 1 :(得分:0)

我在我的MVC应用程序中使用uploadify。它是免费的,是上传多个文件的绝佳解决方案。

http://www.uploadify.com/

http://trycatchfail.com/blog/post/2009/05/13/ASPNET-MVC-HtmlHelper-for-Uploadify-Take-One.aspx

答案 2 :(得分:0)

  var fileNames = new List<string>();

        foreach (string file in Request.Files) {
            var postedFile = Request.Files[file] as HttpPostedFileBase;
            if (postedFile.ContentLength == 0)
                continue;
            fileNames.Add(UploadFile(basedir,postedFile));
        }

foreach中的变量文件包含输入字段的名称。所以它的价值分别是图像和文件。我在MVC2中检查过它

所以你可以这样做

 var fileNames = new Dictionary<string,string>();

                foreach (string file in Request.Files)
                {
                    var postedFile = Request.Files[file] as HttpPostedFileBase;
                    if (postedFile.ContentLength == 0)
                        continue;
                    fileNames.Add(file,UploadFile(basedir,postedFile));
                }

                //Now you have added the values with key so you can use the
                //input field name to access them
                report.Image = fileNames["Image"];
                report.File = fileNames["File"];