Request.Files пуст, когда файлы поступают в виде массива - PullRequest
0 голосов
/ 29 мая 2019

Я делаю некоторую интеграцию со сторонним программным обеспечением для создания форм, которое позволяет отправлять форму на наш собственный сервер.Данные и файлы формы затем сохраняются в БД.Проблема в том, что когда форма содержит несколько полей для загрузки файла, Request.Files всегда пусто.

Используя Fiddler, я вижу, как поступают двоичные файлы.Единственное, о чем я могу думать, это то, что имя поля содержит квадратные скобки (потому что оно отправляется в виде массива), и поэтому механизм связывания модели не может связать его должным образом?Имена полей, которые проходят через tfa_20[0] и tfa_20[1].

В коде, это довольно стандартные вещи:

var data = new Submission()
{
    ConfigurationDetailId = configDetail.Id,
    SubmitterEmail = submitterEmail,
    SubmissionData = Request.Form.AllKeys.Select(k => new SubmissionData()
    {
        FieldName = k,
        FieldValue = Request.Form[k]
    }).ToList(),
    SubmissionFiles = new List<SubmissionFile>()
};

// process any files uploaded
if (Request.Files.Count > 0)
{
    foreach (string field in Request.Files)
    {
        var uploadedFile = Request.Files[field];

        if (!string.IsNullOrEmpty(fileName))
        {
                data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile, fileName));
        }
    }
}

Repository.SaveForm(data);

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 31 мая 2019

Используйте HttpPostedFileBase, чтобы получить опубликованный файл для вашего действия. в случае нескольких файлов следует использовать массив HttpPostedFileBase [].

Чтобы включить загрузку в формах, необходимо добавить enctype = "multipart / form-data" в тег формы. или если вы используете синтаксис бритвы, измените свой тег beginForm на этот.

View.cshtml

   @using (Html.BeginForm("action","controller", FormMethod.Post, new { @enctype = 
  "multipart/form-data" }))
    {
    }

 public ActionResult YourAction(HttpPostedFileBase[] files)
    {
        var data = new Submission()
        {
            ConfigurationDetailId = configDetail.Id,
            SubmitterEmail = submitterEmail,
            SubmissionData = Request.Form.AllKeys.Select(k => new SubmissionData()
            {
                FieldName = k,
                FieldValue = Request.Form[k]
            }).ToList(),
            SubmissionFiles = new List<SubmissionFile>()
        };

        if (files.Length > 0)
        {
            foreach (HttpPostedFileBase file in files)
            {
                var uploadedFile = file;

                if (!string.IsNullOrEmpty(file.FileName))
                {
                    data.SubmissionFiles.Add(GetSubmissionFile(uploadedFile, file.fileName));
                }
            }
        }

        return View();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...