加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:24:15 所属栏目:asp.Net 来源:网络整理
导读:如果我有这样的输入元素: input type="file" multiple="multiple" name="file1" / 并选择多个文件,浏览器使用相同的’file1’名称元素创建多个文件.这就像是列表框的多选. 那么如何使用Request.Files集合在ASP.NET中捕获它呢? Request.Files.AllKeys集合显
如果我有这样的输入元素:

<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团队没有预料到多文件上传.您可以编写一个适配器类来将Request.Files转换为具有HttpPostedFileWrapper迭代器的集合,因此您可以使用for / each结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读