Когда входным именем является файл [], привязка к IFormFile не работает.Dropzone + .Net Core Web API - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь загрузить много файлов за запрос, используя dropzone, и веб-API, используя .Net Core.

Для этого мы должны настроить Dropzone на отправку большого количества файлов за один запрос с помощью параметра uploadMultiple. По умолчанию 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)

Работает для первой записи массива файлов.

Итак, я ищу способ создания шаблона имени «File [any_number]», отправленного Dropzone для привязки в IList .Net Core Web API.

Есть ли способ достичь этого?

Пока что, чтобы решить эту проблему, я читаю файлы прямо из запроса. Как это:

var files = HttpContext.Request.Form.Files;

Но я предпочитаю использовать альтернативу связывания.

1 Ответ

0 голосов
/ 05 июня 2019

Ну, я думаю, что я нашел решение.

Кажется, что [FromForm (Name = "File")] может получать только литеральную строку, а не образец.Так что в конце Web API делать нечего.

Но мы можем изменить способ, которым dropzone отправляет файлы, удалив [] из входного имени.Благодаря этой проблеме:

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

Существует скрытая функция (не документированная), которая позволяет нам передавать функцию в параметр paramName вместо строки.Делая это, мы переопределяем поведение dropzone, добавляя [] в имя файла, когда несколько.

При этом файлы отправляются так, как обычно, и привязка работает естественным образом.

...