簡體   English   中英

當輸入名稱為file []時,對IFormFile的綁定不起作用。 Dropzone + .Net Core Web API

[英]When input name is file[] the bind to IFormFile does not work. Dropzone + .Net Core Web API

我正在嘗試使用dropzone和使用.Net Core的Web API為每個請求上傳多個文件。

為此,我們必須使用uploadMultiple選項配置Dropzone以在一個請求中發送許多文件。 默認情況下,dropzone每個請求發送一個文件。 如果要上傳10個文件,則會發出10個請求。 我不希望這樣。

當uploadMultiple設置為true時,dropzone會將[]附加到輸入的名稱。 例如,假設輸入的名稱是Files。 當uploadMultiple為true時,它變為Files []。

要讀取.Net Core Web API中的文件,我們只需要創建一個從表單接收IList讀取的控制器。 像這樣:

public ActionResult<MyResponse> Upload([FromForm] IList<IFormFile> Files)

問題

問題是名稱中的[]。 Dropzone以名稱發送文件:

文件[0],文件[1] ...文件[N]

然后.Net Core中的綁定失敗,因為它希望名稱為File。 我試圖將綁定名稱更改為:

public ActionResult<MyResponse> Upload([FromForm(Name = "Files[]")] IList<IFormFile> Files)

但這不行。 當我改為:

public ActionResult<MyResponse> Upload([FromForm(Name = "Files[0]")] IList<IFormFile> Files)

它適用於文件數組的第一個條目。

所以我正在尋找的方法是使Dropzone發送的名稱模式“File [any_number]”綁定到.Net Core Web API的IList中。

有沒有辦法實現這一目標?

到目前為止,為了解決這個問題,我正在直接從請求中讀取文件。 像這樣:

var files = HttpContext.Request.Form.Files;

但我更喜歡使用綁定替代方案。

好吧,我想我找到了解決方案。

似乎[FromForm(Name =“File”)]只能接收文字字符串而不是模式。 因此,Web API端無關。

但是我們可以通過從輸入名稱中刪除[]來改變dropzone發送文件的方式。 感謝這個問題:

https://github.com/enyo/dropzone/issues/901

有一個隱藏的功能(未記錄)允許我們將函數傳遞給paramName選項而不是字符串。 通過這樣做,我們覆蓋了多個時在文件名中添加[]的dropzone行為。

這樣就可以像往常一樣發送文件,並且綁定可以自然地進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM