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

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

Alamofire.AFError.responseValidationFailed(причина: Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType(acceptContentTypes: ["изображение /x-xbitmap", "изображение /jpeg", "приложение / октет-поток", "изображение / gif 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. Отсутствует тип содержимого ответа, допустимые типы содержимого
  2. Убедитесь, что вы установили допустимые типы контента alamofire
  3. Сериализаторы отклика изображения

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

Версия модуля:

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

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

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

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

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

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

2 ответа

Решение

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

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

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

Во-первых, заголовки ваших запросов не имеют ничего общего с правильностью ответа, поэтому добавляем 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."
  }
}

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

Другие вопросы по тегам