在WebMatrix中单独获取发布的文件

时间:2012-10-23 20:31:49

标签: c# html file webmatrix

我无法将用户可能发布的文件分隔到单独的input type =“file”字段。我试过了:

var UploadedPicture = Request.Files[0];
    if(Path.GetFileName(UploadedPicture.FileName) != String.Empty)
    {
        var ContentType = UploadedPicture.ContentType;
        var ContentLength = UploadedPicture.ContentLength;
        var InputStream = UploadedPicture.InputStream;
        Session["gMugshot"] = new byte[ContentLength];
        InputStream.Read((byte[])Session["gMugshot"], 0, ContentLength);
    }
    else
    {
        Session["gMugshot"] = new byte[0];
    }

但是只获得一个文件。我试过了

foreach (HttpPostedFile postedFile in Request.Files)
        {
            int contentLength = postedFile.ContentLength;
            string contentType = postedFile.ContentType;
            string fileName = postedFile.FileName;

            postedFile.SaveAs(@"c:\test\file" + index + ".tmp");
        } 

    }

但是这并没有将它们分开(另外,我不想保存文件,我只想将它存储在数据库中,但那部分没有问题)。他们每个人都需要进入单独的数据库字段。我可以使用单个图像进行此操作,但不知道如何使用倍数。如果可能,我希望使用input type="file"字段而不是FileUpload.GetHtml(initialNumberOfFiles:1, allowMoreFilesToBeAdded:false, includeFormTag:false)帮助程序。

是否可以通过输入元素的ID检索它们?

1 个答案:

答案 0 :(得分:2)

向页面添加多个input type = file元素时,上传的文件在Request.Files集合中可用。您可以在代码显示时迭代它,并对集合中的每个文件执行您喜欢的任何操作:

if(Request.Files.Count > 0){
    foreach(var file in Request.Files){
        ...
    }
}

如果您有不同的输入类型=文件用于特定目的,您可以通过提供名称属性来识别它们:

<input type=file name="file1" />
<input type=file name="file2" />
<input type=file name="file3" />

name属性中的值在Request.Files.AllKeys中可用,它是一个字符串数组,因此您可以按索引引用每个项目,例如

if(IsPost && Request.Files.Count > 0){
    var file3 = Request.Files[Array.IndexOf(Request.Files.AllKeys, "file3")];
    if(file3.ContentLength > 0){
        //there is a file there
    }
}