如果我有一个像这样的输入元素:
<input type="file" multiple="multiple" name="file1" />
并选择多个文件,浏览器会创建多个具有相同“file1”名称元素的文件。这就像列表框的多项选择。
那么如何使用 Request.Files 集合在 ASP.NET 中捕获此内容? Request.Files.AllKeys 集合显示所有文件,但键值全部相同。 Request.Files 返回每个键的字符串,但我只能使用该键检索第一个文件:
var file = Request.Files["file1"];
这给了我第一个文件,但我无法访问也以这种方式选择的其他文件,因为它们没有唯一的名称。迭代也不起作用,因为 Request.Files 只返回键而不返回实际的文件条目。
如何在 ASP.NET 中捕获这些辅助文件?
最佳答案
首先,您是对的,Request.Files 集合的所有键都将是“file1”(或者输入元素的任何名称)。
但是,您可以按索引循环遍历集合,并使用每个 HttpPostedFileBase 对象的“Filename”属性检索每个上传的文件名。
每个对象还将包含一个InputStream,当我在 Visual Studio 中调试它时,我可以从 Length 属性看到该流实际上包含每个图像的内容。
示例:
[HttpPost]
public ActionResult Upload()
{
for (int i = 0; i < Request.Files.Count; i++)
{
Console.WriteLine(Request.Files[i].FileName);
Console.WriteLine(Request.Files[i].InputStream.Length);
}
return View();
}
我猜 ASP.NET 团队没有预料到多文件上传。您可能可以编写一个适配器类,以使用 HttpPostedFileWrapper 迭代器将 Request.Files 转换为集合,这样您就可以使用 for/each 结构。
关于asp.net - 如何从 HTML 5 多文件输入元素捕获上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9551894/