преобразование URL-адреса данных в формат, который я могу использовать для отправки на мой серверный веб-API и хранения в базе данных - PullRequest
0 голосов
/ 06 августа 2020

В настоящее время я перетаскиваю / загружаю изображения в качестве URL-адреса данных и отображаю их с этим URL-адресом. Что я сейчас пытаюсь сделать, так это отправить эти загруженные изображения на мой серверный веб-api, используя ядро ​​ASP. Net, чтобы сохранить их в базе данных sqlite, это требование для моего приложения.

В настоящее время я преобразование URL-адреса данных в буфер массива с использованием следующего кода.

async srcToFile(context, asset) {
         const files = asset[0].files.fileList;
         let results = [];
         for (let i = 0; i < files.length; i++) {
             const file = files[i];
              const data = file.data;
              const name = file.name;
              const mimeType = file.type;

             await fetch(data)
                  .then(function(res) {
                      const r = res.arrayBuffer();
                      console.warn('resource ', r);
                      return r;
                  })
                  .then(function(buf) {
                      console.warn('buffer: ', [buf]);
                      const fileData = {data:[buf], name:name, type:mimeType};
                      results.push(fileData);
                      console.warn('results of file: ', fileData);
                  });
          }
         console.warn(results);
         return results;
     }

затем я помещаю его в объект данных для отправки на мой сервер через ax ios так выглядит этот объект данных

const data = {
           Name: asset[0].name,
           Detail: asset[0].detail,
           Files: asset[0].files.fileList
      };

Когда я консоль из файлов, он показывает, что в нем есть данные Arraybuffer. Но когда я отправляю его на свой сервер, похоже, что данные удаляются из вызова заголовка. Потому что, когда я смотрю на заголовок, у меня больше нет этих данных, и я не могу понять, почему это происходит.

это мой вызов ax ios.

axios.post('https://localhost:5001/api/Assets', data)
            .then(res => console.log(res))
            .catch(error => console.log(error));

и мой внутренний веб-контроллер api post

public async Task<ActionResult> PostAsset([FromBody] AssetSaveRequest request,[FromForm] List<IFormFile> files)
        {
            foreach (var file in files)
            {
                if (file.Length > 0)
                {
                    using (var ms = new MemoryStream())
                    {
                        file.CopyTo(ms);
                        var fileBytes = ms.ToArray();
                        string s = Convert.ToBase64String(fileBytes);
                        // act on the Base64 data
                    }
                }
            }

            var assetCreationDto = new AssetCreationDto(request);
            //var assetCreationDto = "";
            

            try
            {
                var asset = _mapper.Map<Asset>(assetCreationDto);
                _context.Assets.Add(asset);
                //await _context.SaveChangesAsync();
                var assetDto = _mapper.Map<AssetDto>(asset);

                return CreatedAtAction("GetAsset", new {assetDto.Id}, assetDto);
            }
            catch (DbUpdateException dbe)
            {
                var errorCode = ((Microsoft.Data.Sqlite.SqliteException) dbe.InnerException).SqliteErrorCode;
                switch (errorCode)
                {
                    case 19:
                        Console.WriteLine(((Microsoft.Data.Sqlite.SqliteException)dbe.InnerException).Message);
                        break;
                    default:
                        Console.WriteLine("Something went wrong");
                        break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            return null;


        }

То, о чем я не знаю, работает, потому что я никогда не получаю данные файла, я все равно получаю Имя и детали, которые приходят в норму.

Мне нужен совет, что мне здесь делать, чтобы заставить это работать. Я попытался преобразовать буфер массива в строку base64, но это не помогло, и мне было бы здорово помочь, и предложения были бы замечательными, чтобы вернуть меня в правильное русло с этим проектом.

ОБНОВЛЕНИЕ: Я изменил свой код srcToFile, чтобы дать мне файл, теперь я использую ax ios для отправки файла и данных на бэкэнд, работающий в это время с одним файлом, и теперь все, что я получаю в заголовке, это [объект объекта]. Я пробовал JSON .stringify для своих данных, вот так

const data = JSON.stringify({
           Name: asset[0].name,
           Detail: asset[0].detail,
           Files: asset[0].files.fileList
       });

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

У меня есть протестировал с почтальоном и сделал несколько успешных сообщений. но я не могу получить правильные данные из моего Vue внешнего интерфейса.

вот где я сейчас нахожусь. любые предложения всегда помогают

...