AlamofireImage Code=-1016 Не удалось проверить ответ из-за недопустимого типа контента

Я получил URL-адрес изображения, используя Alamofire и SwityJSON для анализа ответа, полученного от API. Позже, в моем коде, я пытаюсь использовать AlamofireImage, чтобы установить это изображение в ImageView... Я пытаюсь сделать следующее:

let headers = ["Authorization": requestToken, "Content-Type": "image/jpg"]

        print(foods[indexPath.row].image)

        Alamofire.request(.GET, imageEndPoint, headers: headers)
            .responseImage { response in
                debugPrint(response)
                print(response.request)
                print(response.response)

                if let image = response.result.value {
                    print("image downloaded: \(image)")
                }
        }

Однако при отладке я получаю следующие ошибки

 Request]: <NSMutableURLRequest: 0x7fa93e052e60> { URL: http://159.203.92.55:9000/api/media/image?path=./server/uploads/images/products/jOqmy768a5wN2tcPd07cPhVH.jpg }
[Response]: <NSHTTPURLResponse: 0x7fa93e05a0a0> { URL: http://159.203.92.55:9000/api/media/image?path=./server/uploads/images/products/jOqmy768a5wN2tcPd07cPhVH.jpg } { status code: 200, headers {
Connection = "keep-alive";
"Content-Type" = "image/jpg";
Date = "Sun, 17 Jan 2016 16:28:38 GMT";
"Transfer-Encoding" = Identity;
"X-Powered-By" = Express;
} }

[Data]: 26224 bytes
[Result]: FAILURE: Error Domain=com.alamofire.error Code=-1016 "Failed to validate response due to unacceptable content type" UserInfo={NSLocalizedFailureReason=Failed to validate response due to unacceptable content type}
Optional(<NSMutableURLRequest: 0x7fa93e052e60> { URL: http://159.203.92.55:9000/api/media/image?path=./server/uploads/images/products/jOqmy768a5wN2tcPd07cPhVH.jpg })

Очевидно, есть ошибка из-за типа контента, но я не уверен, как ее решить:

[Result]: FAILURE: Error Domain=com.alamofire.error Code=-1016   "Failed to validate response due to unacceptable content type"  UserInfo={NSLocalizedFailureReason=Failed to validate response due to unacceptable content type}

Из-за этой ошибки я не могу продолжить и просто установить изображение в imageView

   cell.thumbnailImageView.image = myImage

Когда я пытаюсь выполнить те же запросы с помощью Chrome Postman, я получаю изображение без каких-либо проблем.

Предложения кто-нибудь? спасибо

ОБНОВЛЕНИЕ: я нашел способ, который далек от того, что я хотел, но работает

  Alamofire.request(.GET, foods[indexPath.row].image, headers: headers)
                .response { (request, response, data, error) in
                    debugPrint(response)
                    cell.thumbnailImageView.image = UIImage(data: data!, scale: 1) 
           }

это ванильный Alamofire, поэтому я до сих пор не смог использовать AlamofireImage, который обеспечивает лучшую поддержку изображений. Я получил этот метод из следующего сообщения: Как быстро загрузить изображение с помощью Alamofire (ответ Skywinder)


person Jesus Rodriguez    schedule 17.01.2016    source источник


Ответы (2)


Итак, я заметил, что ответ сервера был "Content-Type" = "image/jpg"; но, как указал пользователь @Gomines, правильный тип контента для alamofireImage на самом деле "Content -Тип": "изображение/jpeg"

Затем я вернулся к документам AlamofireImages и прочитал это.

Если изображение, которое вы пытаетесь загрузить, имеет недопустимый тип MIME, которого нет в списке, вы можете добавить собственные допустимые типы контента, используя расширение addAcceptableImageContentTypes для типа запроса.

Поэтому мне просто нужно было добавить эту строку кода перед запросом AlamofireImage:

Request.addAcceptableImageContentTypes(["image/jpg"])

Проблема заключалась в том, что я не соответствовал тому типу контента, на который отвечал сервер. Однако эта строка решает проблему, потому что теперь AlamofireImage также будет принимать тот же тип, который отправляет сервер.

person Jesus Rodriguez    schedule 20.01.2016
comment
Это все еще работает для вас? Раньше это работало для меня. Теперь я использую XCode 8 и Swift 2.3, и этот хак больше не работает с моим кодом. - person drv; 31.10.2016
comment
Да, это работает, это не взлом, а метод Alamofire. - person Jesus Rodriguez; 31.10.2016
comment
Привет @JesusAdolfoRodriguez Не могли бы вы сказать, где именно добавить эту строку. У меня такая же проблема, но я не понимаю, где ее использовать. Я сделал Alamofire.request(...).responseImage(completionHandler: ) Пожалуйста, помогите - person Bella; 25.04.2018
comment
@Bella Белла, я думаю, это поможет вам github.com/Alamofire/AlamofireImage/issues/190 - person Jesus Rodriguez; 25.04.2018
comment
@JesusAdolfoRodriguez Привет, спасибо. Но у меня нет URL изображения. У меня есть вызов API https://....../api/download вместе с параметрами запроса. Я получаю изображение в ответ. Я пробовал вышеуказанную ссылку, но не удалось. :( - person Bella; 25.04.2018
comment
вам не нужен URL-адрес изображения, а только для добавления того, что сервер contentType отправляет с помощью DataRequest.addAcceptableImageContentTypes(["image/jpg"]), замените image/jpg типом контента сервера - person Jesus Rodriguez; 25.04.2018

Вы ошиблись с типом контента. Это должно быть image/jpeg (http://www.sitepoint.com/web-foundations/mime-types-complete-list/).

let headers = ["Authorization": requestToken, "Content-Type": "image/jpeg"]

Надеюсь, это решит проблему.

person Jessy Naus    schedule 20.01.2016
comment
Я сделал эту ошибку, и спасибо, что указали на нее, но это ничего не меняет, я все еще получал тот же ответ, но вы заставили меня понять, что может происходить. Проверьте мой ответ. - person Jesus Rodriguez; 21.01.2016