asp.net - 如何从 HTML 5 多文件输入元素捕获上传的文件

标签 asp.net file-upload

如果我有一个像这样的输入元素:

<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/

相关文章:

asp.net - 使用 HttpClient 进行测试时,Task.Run 永远不会完成

jquery - 跨浏览器文件上传输入黑客

php - MySQL中简单上传多张图片

node.js - 在 ExpressJS/NodeJS 中移动文件

json - 如何 Chrome 网上商店验证 manifest.json

asp.net - Asp.Net MVC 中的 301 重定向

javascript - 如何在 C# 中将 Javascript 字符串写入 StringBuilder

c# - 在 ASP.NET Core 中使用 ADO.NET 作为数据访问层

asp.net - 如果没有发表评论将显示在表单 View 中,您如何显示评论计数?

file-upload - Blueimp jQuery 文件上传 - 如何更改上传目录