Выполнение PATCH с файлом и некоторыми полями с использованием multipart / form-data - PullRequest
0 голосов
/ 15 февраля 2019

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

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

const file = new FormData()
file.append('uploadedFile', uploadedFile, uploadedFile.name)
const patch = {
  name: 'Some Name',
  age: 18,
  file
}

return isomorphicFetch(`${MY_URL}`, {
    headers: {
      Accept: 'application/json'
    }
    method: 'PATCH',
    body: patch
  })

Вот как выглядит мое промежуточное программное обеспечение:

const multipartMiddleware = multer({ dest: 'uploads/' })
  app.use('/myendpoint',
    multipartMiddleware.single('uploadedFile'),
    (req, res, next) => {
      console.log('REQ', req)
      req.feathers.file = req.file
      next()
    }
  )

Вот в чем дело: если я только поставлю file в качестве теламой PATCH, он работает просто отлично, у меня будет объект req.file в промежуточном программном обеспечении, как и ожидалось, однако с объектом patch, который я показываю в моем примере, у меня нет объекта req.file.Что я делаю неправильно?Я хотел бы сохранить и мои файлы, и поля имени и возраста.

Имейте в виду, что если я разделю его на два вызова, он будет работать так, как ожидалось.Чтобы это работало, в настоящее время это выглядит так:

// This code is the only way I can make my patches work:

const file = new FormData()
file.append('uploadedFile', uploadedFile, uploadedFile.name)
const patch = {
  name: 'Some Name',
  age: 18,
}

return Promise.all([
    isomorphicFetch(`${MY_URL}`, {
       headers: {
         Accept: 'application/json'
       },
        method: 'PATCH',
        body: patch
      }),
    isomorphicFetch(`${MY_URL}`, {
       headers: {
        Accept: 'application/json'
       },
        method: 'PATCH',
        body: file
      })
  ])

Обновление: я попытался сделать это через Почтальон, и это действительно сработало.Так что теперь я еще больше запутался.

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