为了账号安全,请及时绑定邮箱和手机立即绑定

C#中文件上传字段的动态名称

C#中文件上传字段的动态名称

C#
繁星coding 2021-11-07 19:23:01
我为我的公司创建了一个动态表单生成器。它允许用户创建具有不同名称的不同表单字段。处理表单很容易,但文件上传却是一场噩梦,因为控制器不知道表单字段的名称。就我而言,表单字段可以是这样的:<input type="file" name="certificate" accept=".pdf" />或者<input type="file" name="course-certificate" accept=".pdf, .docx" />它甚至可以在一种形式中包含一个或多个文件字段问题是,当它在提交表单后转到 post 方法时,我应该有一个文件参数。它可以是单个文件,例如:[HttpPost]public ActionResult Create(HttpPostedFileBase file) // For a single file upload{}或者[HttpPost]public ActionResult Create(IEnumerable<HttpPostedFileBase> files) // For multiple file uploads{}但是我需要发送带有随机名称的文件,这些文件甚至可以在中间有一个破折号。解决这个问题的方法是什么?我不想在发送之前使用任何类型的 jQuery 来准备表单,我希望能够在发送表单时发送它,并在我的控制器中接收它。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

有HttpRequest.Files可用的集合,它表示<input type="file" />使用表单提交从元素上传的文件。您只需要使用标记为 的控制器操作for或foreach循环内部对其进行迭代HttpPostAttribute:


for-循环版本


for (int i = 0; i < Request.Files.Count; i++)

{

    var uploadedFile = Request.Files[i] as HttpPostedFileBase;


    if (uploadedFile.ContentLength > 0)

    {

        // do something

    }

}

foreach-循环版本


foreach (string fileName in Request.Files)

{

    var uploadedFile = Request.Files[fileName] as HttpPostedFileBase;


    if (uploadedFile.ContentLength > 0)

    {

        // do something

    }

}

注意:使用foreach循环,如果Request.Files集合有重复的文件名,第一个匹配的文件名将被多次存储,即使它们的大小不同(相关问题here)。因此,for循环方法更受欢迎(并且您仍然可以使用 获得相应的文件名uploadedFile.FileName)。


查看完整回答
反对 回复 2021-11-07
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信