亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 195 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號