Отправить объект с файлом как поле через ajax - PullRequest
0 голосов

У меня есть папка как структурированный объект (древовидная структура папок с файлами в каждой папке).Я пытался отправить этот объект мне на сервер (сейчас .net core 2.2), но у меня возникла ошибка.

Я пытался отправить этот объект как FormData (потому что я работаю с файлом) и сериализовать в json, но в любомВ случаях, когда я работаю со смешанным (файлы и поля) объектом, я получаю объект со всеми полями нулевых значений.Попытка Преобразовать объект JS для формирования данных это решение, но действие контроллера не получает запрос.

Пример структуры объектов

 let newFolder = {
        name: name,
        folders: [],
        images: []
    }
    let newImage = {
        name: file.name,
        url: window.URL.createObjectURL(file),
        file: file, //File from input
    }

Как я пытался загрузить как FormData

    var form_data = new FormData();
    buildFormData(form_data, rootFolder);
    console.log(form_data);
    $.ajax({
        url: 'myurl',
        processData: false,
        contentType: false,
        data: form_data,
        type: 'post'
    });

    function buildFormData(formData, data, parentKey) {
      if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {
        Object.keys(data).forEach(key => {
            buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key);
        });
      } else {
        const value = data == null ? '' : data;

        formData.append(parentKey, value);
      }
  }

Ожидаемый результат: объект .net с IFormFile вместо файловых полей для полей изображений или информацией, что это невозможно.

Обновление: форма отправлена ​​в контроллер, но ядро ​​.net не может проанализироватьэто. (пробовал Отображение вложенных данных X-Form-Urlencoded в DTO в Asp.NET Core )

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