Создать FormData с массивом изображений и загрузить его с помощью rn-fetch-blob в React-Native - PullRequest
0 голосов
/ 08 февраля 2019

Я использую библиотеку rn-fetch-blob для загрузки некоторых изображений на сервер.Но я получаю различные типы ошибок, такие как отсутствие границ для Content-Type или ошибки с самой структурой FormData, такие как «типа NSMutableDictionary не могут быть преобразованы в NSString», я получаю довольно разочарованы.

Я получил массив изображений, подобный этому:

var images = [
     {name 'pic1', data: RNFetchBlob.wrap(imagePathHere), type: 'image/jpeg'},
     {name 'pic2', data: RNFetchBlob.wrap(imagePathHere), type: 'image/jpeg'},
     {name 'pic3', data: RNFetchBlob.wrap(imagePathHere), type: 'image/jpeg'},
];

Затем я создаю FormData следующим образом:

  const formData = new FormData();
  formData.append('id', userId)   // <-- numeric type
  formData.append('pictures', images);

Я делаю запрос на публикацию от RNFetchBlob с 'Content-Type': 'multipart/form-data', и япередать форму Data непосредственно к нему.

Есть идеи, что не так?Я где-то читал, что FormData допускает только строки или большие двоичные объекты, я должен создать Blob из моего массива?Как я могу это сделать?

Заранее спасибо.

1 Ответ

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

После долгой борьбы в каком-то другом github я нашел решение о структуре, которую мне пришлось передать для параметров.Это было бы правильным для моего конкретного случая.

   var reqData = [
      { name: 'id', data: response.data.id }
   ];

   this.state.images.forEach((image) => {
      reqData.push({
         data: image.imageFile,
         filename: image.fileName.split('.')[0] + '.jpg',
         name: 'pictures',
         type: image.type
      })
   });

Но в основном это было бы примером этого:

var params = [
   { 
       name: 'id',
       data: 43
   },
   { 
       name: 'image',
       data: RNFetchBlob.wrap(imagePath),
       filename: 'image1.jpg',
       type: 'image/jpeg'
   },
   { 
       name: 'image',
       data: RNFetchBlob.wrap(imagePath),
       filename: 'image2.jpg',
       type: 'image/jpeg'
   },
];
...