Как перенести фотографии в x- www-form-urlencoded сразу после фотосъемки EXPO - PullRequest
0 голосов
/ 19 февраля 2020

Я хочу сделать снимок, сохранить его в альбом и сразу же отправить изображение. ( Не выбирать из альбома. )

Нет проблем с записью текущего изображения, сохранением его в альбоме и проверкой URI.

, но процесс отправки x- www-form-urlencoded не работает должным образом.

Я думаю, что может быть проблема с форматом отправки API.

почтальон также прилагается. (Нет проблем с почтальоном.)

 takePictureAndCreateAlbum = async () => {
    const { uri } = await this.camera.takePictureAsync();
    console.log('uri', uri);
    const asset = await MediaLibrary.createAssetAsync(uri);
    console.log('asset', asset);

    const filename = asset.filename;

    MediaLibrary.createAlbumAsync('Expo', asset)

      // POST API
      .then(() => {

        var file = new FormData();
        file.append({file: uri});

        return fetch(/* API_URL */, { 
              method: 'POST',
              headers:{

                  'Content-Type':'application/x-www-form-urlencoded',
                  'Accept': 'application/json'
             } , body : file} )

         .then((response) => response.text())
              .then((responseData) => {
                  console.log(responseData);
              })
              .done();

      })
      .catch(error => {
        Alert.alert('An Error Occurred!')
      });
  };

Заголовок почтальона

Тело почтальона

1 Ответ

0 голосов
/ 19 февраля 2020

При добавлении к экземпляру FormData первый параметр - это имя поля (что ваш сервер будет получать в качестве ключа объекта для этого файла), второй - это объект в следующем виде:

{
  uri: // The uri you received from the camera,
  type: // The file type (i.e.: image/png),
  name: // The file name
}

В вашем случае это будет выглядеть так:

// Split the uri by `.` (periods)
const uriParts = uri.split('.');
// Grab the file type at the end of the uri
const fileType = uriParts[uriParts.length - 1];

file.append('picture', {
  uri,
  type: `image/${fileType}`,
  name: 'FILE-NAME.${fileType}`
});

Кроме того, при отправке файлов заголовок Content-Type должен быть multipart/form-data

...