使用MVC上传和处理多个文件
本文关键字:文件 处理 MVC 使用 | 更新日期: 2023-09-27 18:13:26
我正在尝试在我的web应用程序上上传多个文件。因此,我使用IEnumerable<HttpPostedFileBase>
类在每个文件内循环。但是我得到一个错误的陈述-
错误
System.Collections.Generic.IEnumerable<System.Web.HttpPostedFileBase>
不包含'ContentLength'的定义,并且没有扩展方法'ContentLength'接受类型System.Collections.Generic.IEnumerable<System.Web.HttpPostedFileBase
'的第一个参数可以找到(您是否缺少using指令或程序集引用?)
此错误适用于HttpPostedFileBase类中存在的所有属性。我试图编辑类,但它不允许。我尝试在我的ViewModel中创建一个IEnumerable的HttpPostedFileBase类,但它再次失败。我遗漏了什么?
更新-代码:查看
<div class="col-sm-8">
<input type="file" name="Files" id="file1" class="form-control" />
<input type="file" name="Files" id="file2" class="form-control" />
<input type="submit" value="Save" class="btn btn-default" name="Command"/>
</div>
控制器public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> Files)
{
foreach (var item in Files)
{
if (Files != null && Files.ContentLength > 0)
{
FileUpload up = new FileUpload();
up.PersonId = model.PersonId;
up.FileName = System.IO.Path.GetFileName(Files.FileName);
up.MimeType = Files.ContentType;
up.FileContent = Files.Content;
bll.AddFileUpload(up);
}
}
return View();
}
问题就在这里:
foreach (var item in Files)
if (Files != null && Files.ContentLength > 0)
您使用foreach
来迭代集合,但是您仍然检查称为File
的IEnumerable
而不是每个项目。你想要的是:
foreach (var item in Files)
if (item != null && item.ContentLength > 0)
作为旁注,您可以使用Enumerable.Where
:
foreach (var item in Files.Where(file => file != null && file.ContentLength > 0))
{
FileUpload up = new FileUpload
{
PersonId = model.PersonId,
FileName = System.IO.Path.GetFileName(item.FileName),
MimeType = item.ContentType,
FileContent = item.Content,
};
bll.AddFileUpload(up);
}
您试图在集合上调用.ContentLength
,而不是在该集合中的文件上。相反,请尝试这样做:
// given postedFiles implements IEnumerable<System.Web.HttpPostedFileBase
foreach(var postedFile in postedFiles) {
var len = postedFile.ContentLength
}
您的代码试图访问集合本身,但您需要像这样访问集合项:
foreach (var item in Files)
{
FileUpload up = new FileUpload();
up.PersonId = model.PersonId;
up.FileName = System.IO.Path.GetFileName(item.FileName);
up.MimeType = Files.ContentType;
up.FileContent = item.Content;
bll.AddFileUpload(up);
}