Загрузка изображения в React Native (Expo) с использованием выборки приводит к ошибке 400 - PullRequest
0 голосов
/ 23 февраля 2019

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

let formData = new FormData();
formData.append('file', {
  uri: uri,
  name: `name`,
  type: `image/jpeg`,
});

URI на iOS это что-то вроде asset-library://asset/path на Android, это похоже на content://media/external/images/media/25377.

let options = {
  method: 'POST',
  body: formData,
  headers: {
    Accept: 'application/json',
    'Authorization': 'Bearer ' + token,
  },
};
let response = await fetch("https://myserverurl", options)

Я пробовал каждый трюк, читаяизображение в виде BLOB-объекта, удаление типа содержимого, других библиотек, таких как axios и т. д. Независимо от того, что я всегда получаю, возвращаю 400 ошибочных форматов файлов.

Есть ли что-то, чего мне не хватает в formdata?(На сервере мы используем ASP.NET)

1 Ответ

0 голосов
/ 24 февраля 2019

У нас была похожая проблема, и мы смогли решить ее следующим образом.Мы используем серверную часть NodeJS (с multer) для обработки загрузки файлов.

Expo - код мобильного приложения

  // extract the filetype
  let fileType = uri.substring(uri.lastIndexOf(".") + 1);

  let formData = new FormData();

  formData.append("photo", {
    uri,
    name: `photo.${fileType}`,
    type: `image/${fileType}`
  });

  let options = {
    method: "POST",
    body: formData,
    headers: {
      Accept: "application/json",
      "Content-Type": "multipart/form-data"
    }
  };

Мы выполняем запрос с fetch(apiUrl, options).

uri - это локальный путь к файлу (полный URI, например, file:///...) фотографии в нашем случае, а apiUrl - это конечная точка на стороне сервера.

Iдумаю, что проблема может быть связана с типом и форматом uri в форме данных.Вы пытались использовать uri, возвращенный средством выбора изображений?

...