Ошибка извлечения изображения из хранилища с сообщением «Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType»

Я пытаюсь получить изображение из хранилища Firebase, но получаю сообщение об ошибке:

Alamofire.AFError.responseValidationFailed(причина: Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType(acceptableContentTypes: ["image/x-xbitmap", "image/jpeg", "application/octet-stream", "image/gif", "image/ ico", "image/tiff", "image/x-icon", "image/bmp", "image/x-bmp", "image/x-win-bitmap", "image/png", "image/ x-ms-bmp"], responseContentType: "application/json")

Мой URL-адрес выглядит следующим образом: https://firebasestorage.googleapis.com/v0/b/####/o/executors/o4uAQa158nXTvJ5omuxqcRb0e793/products/7DDCEEAC-ED54-4910-B93D-5E40BF411B80.

Я могу загрузить это изображение через браузер.

Мое изображение имеет тип MIME 'image/jpeg':введите здесь описание изображения

Я нашел такую ​​же ситуацию:

  1. Отсутствует Content-Type ответа и допустимые типы контента
  2. Убедитесь, что вы установили допустимые для alamofire типы контента
  3. Сериализаторы ответов изображений

Эти подсказки не помогли мне исправить мою ошибку.

Версия пода:

  • Аламофайр: 5.0.2
  • AlamofireImage 4.0.2

Сначала я использовал AlamofireImage: productImageView.af.setImage(withURL: url), но это не сработало. Затем я начал использовать Alamofire. И в запрос я передаю MIME-тип image/jpeg как Content-Type: введите здесь описание изображения

И я решил использовать этот подход для исправления ошибки, но имеет ту же ошибку, и я не понимаю, почему (из документов): введите здесь описание изображения

Если вы видите в сообщении об ошибке, у меня есть:

responseContentType: "приложение/json"

Так есть ли побочный эффект для получения изображения? Что я делаю не так вообще?


person Taras    schedule 02.03.2020    source источник


Ответы (2)


Ссылка должна быть

https://firebasestorage.googleapis.com/v0/b/projectname/o/image.png?alt=media&token=auth_token

замените имя проекта, имя изображения и токен на свои

person Tarik    schedule 03.03.2020

Во-первых, ваши заголовки запросов не имеют ничего общего с тем, является ли ответ действительным, поэтому добавление image/jpeg не поможет. Во-вторых, ваш ответ возвращает тип контента application/json, поэтому добавление image/jpeg к допустимым типам контента не поможет (а image/jpeg уже приемлемо). (Кроме того, вам нужно import AlamofireImage, чтобы заставить addAcceptableImageContentTypes работать.)

В конце концов, вы должны убедиться, что получаете ожидаемый ответ, поскольку тип контента application/json подразумевает, что вы получаете тело JSON, а не изображение для вашего запроса. Когда я запрашиваю опубликованный вами URL-адрес, я получаю ответ в формате JSON:

{
  "error": {
    "code": 400,
    "message": "Invalid HTTP method/URL pair."
  }
}

Поэтому, скорее всего, вам нужно дважды проверить, как вы должны делать запрос.

person Jon Shier    schedule 02.03.2020
comment
Спасибо за ответ) Я добавил import AlamofireImage, чтобы иметь доступ, но это не сработало. И я дал вам неверный URL-адрес - вы можете увидеть #### в URL-адресе, потому что я думаю, что это личная информация. Простите за это. - person Taras; 02.03.2020
comment
Я проверяю правильный URL-адрес в адресной строке браузера, и вы правы, у меня есть код ошибки 400. Я не знаю почему, на самом деле. - person Taras; 02.03.2020