使用消息“Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType”从存储中获取图像时出错

Posted

技术标签:

【中文标题】使用消息“Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType”从存储中获取图像时出错【英文标题】:Error fetch image from storage with message 'Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType' 【发布时间】:2020-03-02 04:52:18 【问题描述】:

我尝试从 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")

我的网址如下所示:https://firebasestorage.googleapis.com/v0/b/####/o/executors/o4uAQa158nXTvJ5omuxqcRb0e793/products/7DDCEEAC-ED54-4910-B93D-5E40BF411B80

我可以通过浏览器下载这张图片。

我的图片有 MIME 类型的“image/jpeg”:

我发现了同样的情况:

    Response Content-Type was missing and acceptable content types Make sure you set alamofire acceptable content types Image Response Serializers

这些提示并没有帮助我修复我的错误。

吊舱版本:

Alamofire:5.0.2 AlamofireImage 4.0.2

最初我使用 AlamofireImageproductImageView.af.setImage(withURL: url),但它不起作用。然后我开始使用Alamofire。并在请求中传递 MIME 类型 image/jpeg,例如 Content-Type

我决定使用这种方法来修复错误,但有同样的错误,我不明白为什么(from docs):

如果您可以在错误消息中看到我有:

响应内容类型:“应用程序/json”

那么获取图片有什么副作用吗?我到底做错了什么?

【问题讨论】:

【参考方案1】:

链接应该是

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

将项目名称、图像名称和令牌替换为您的

【讨论】:

【参考方案2】:

首先,您的请求标头与响应是否有效无关,因此添加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."
  

因此,您很可能需要仔细检查您应该如何提出请求。

【讨论】:

感谢您的回答)我添加了 import AlamofireImage 以获得访问权限,但它不起作用。我给你错误的 url - 你可以在 url 中看到 ####,因为我认为这是私人信息。很抱歉。 我在浏览器的地址栏中测试了正确的 url,你是对的,我有 400 个错误代码。实际上,我不知道为什么。

以上是关于使用消息“Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType”从存储中获取图像时出错的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot:使用Rabbit MQ消息队列

如何使用NODEJS+REDIS开发一个消息队列

在消息队列上使用管道进行基于消息的通信

如何使用消息推送功能?

消息队列基础

消息队列篇—详谈ActiveMQ消息队列模式的分析及使用