Отправка данных изображения Base64 в Node / Express Backend - PullRequest
0 голосов
/ 12 мая 2018

Цель: Чтобы успешно передать данные изображения BASE64 в мой узел / экспресс-сервер, чтобы я мог загрузить их в хранилище Microsoft Azure.

Проблема: Не попадает в конечную точку при отправке данных изображения, блок catch указывает, что изображение не было загружено, и console.log не регистрируется. Когда я отправляю только расширение файла, конечная точка успешно нажимается ( консоль регистрирует пользователя obj ). Насколько я понимаю, мне нужно выгрузить данные изображения BASE64 в Azure для использования во всем приложении.

Stack:

  • Реактивно-родной (^ 0.54.0)
  • Node / Express
  • Microsoft Azure Storage
  • Postgres (sequelize ":" ^ 4.33.2)

Я использую 'response-native-image-picker' для доступа к камере пользователя, возвращаемый объект фото выглядит следующим образом:

Object {isVertical: false, origURL: "assets-library://asset/asset.JPG?id=ED7AC36B-A150-4C38-BB8C-B6D696F4F2ED&ext=JPG", longitude: -19.5112, data: "/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAA…paLbTp1up3fnf8jjajOztyvlV0ldN23+NWvpoklpsr2P/2Q==", fileName: "IMG_0005.JPG"…}
  data:(...)
  fileName:(...)
  fileSize:(...)
  height:(...)
  isVertical:(...)
  latitude:(...)
  longitude:(...)
  origURL:(...)
  timestamp:(...)
  uri:(...)
  width:(...)

Поле данных содержит данные изображения BASE64, которые, как мне кажется, мне нужно передать в свой бэкэнд, чтобы загрузить их в мое хранилище Azure. Ниже приведена клиентская функция, которая ДОЛЖНА отправлять соответствующие данные в серверную часть.

  export function uploadUserPhoto(photoData, photoExt, id) {
  return dispatch => {
    dispatch(authProgress());
      axios.patch(`${API_URL}/users/upload_profile_photo/${id}`, {
        headers: {
            'Accept': 'image/jpeg',
            'Content-Type': 'image/jpeg'
        },
          user: {
              imageData: photoData,
              imageFileName: photoExt
          }
      })
      .then(response => {
          dispatch({type: USER_PHOTO_UPLOAD, payload: response.data});
          Actions.Profile()
          Alert.alert("Upload success!");
      })
      .catch(error => {
        dispatch({ type: USER_PHOTO_UPLOAD_FAILED, payload: error });
        Alert.alert("Upload failed! Please try again!");
      });
  };
}

Я могу подтвердить, что photoData, photoExt успешно передаются в функцию с данными изображения и именем файла. Сторона узла выглядит следующим образом:

router.patch('/upload_profile_photo/:id', async(req, res) => {
console.log(req.body.user)
const paths = await profilePicUpload(req.body.user, req.params.id );
    await models.User.update({image: paths },                     
    { where : {id: req.params.id} });
    const userInfo = await models.User.findById(req.params.id);
    try {
        res.send(userInfo)
    }
    catch(err) {
        console.log(err)
    }
});

Есть предложения? Я смотрел на использование новых FormData () , но безуспешно. Читая другие посты, некоторые указывают на проблему с заголовком, но я не вижу, как это может быть проблемой.

Спасибо.

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