Неверный входной файл загрузки платформы API - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь загрузить файл, используя загрузка файла платформы API .Я использую React-redux с redux-saga для выполнения этого запроса, но сервер продолжает выдавать неправильный ответ на запрос.

В документации платформы Api говорится следующее для выполнения запроса:

Эта конечная точка принимает стандартные данные в формате multipart / form-data, но не данные JSON.Вам необходимо соответствующим образом отформатировать ваш запрос.

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

 let data = new FormData();
 data.append("file", action.payload.file)

 const fileResponse = yield call(
   fetch,
   `${api.url}/api/media_objects`,
   {
     method: 'POST',
     mode: 'no-cors',
     body: data,
     headers: { 'content-type': 'multipart/form-data' }
   }
 );
 return console.log(fileResponse);

Это пример запроса платформы API для публикации нового медиа-объекта

curl -X POST "https://api.myroute/api/media_objects" -H" accept: application / ld + json "-H "Content-Type: multipart / form-data" -F "file=@1.6b.jpg; type = image / jpeg"

Платформа Api возвращает ошибку 400, которая ссылается на недействительнуюЛюбое представление о том, как должен выглядеть действительный ввод?

Для моего объекта медиа-объекта я следовал документации API платформы , поэтому он выглядит точно так же, как в документации

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Детали имеют значение

headers: { 'content-type': 'multipart/form-data' }

Это должно быть

headers: { 'Content-Type': 'multipart/form-data' }

Нет 'content-type', только 'Content-Type' заголовок определен (RFC) и широко принят.

0 голосов
/ 16 мая 2019

Недавно у меня была очень похожая проблема (я не могу вспомнить точную ошибку) с API Platform (и сущностью MediaObject) и React - redux (но без redux-saga).

Iудалось исправить это, удалив часть моего запроса в заголовке:

headers: { 'content-type': 'multipart/form-data' }

Так что мой новый запрос выглядел точно так же, как в моем случае:

const formData = new FormData();
    formData.append('file', file);
    return fetch(id, {
      method: 'POST',
      body: formData
    })
    ...

Я не знаюпочему, но это добилось цели.Возможно, он обрабатывается автоматически, поскольку мы отправляем объект FormData.

Надеюсь, он может работать и для вас!

...