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

Error fetch image from storage with message 'Alamofire.AFError.ResponseValidationFailureReason.unacceptableContentType'

我尝试从 Firebase 存储中获取图像,但出现错误消息:

Alamofire.AFError.responseValidationFailed(reason: 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-type 'image/jpeg':

我发现了同样的情况:

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

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

pod 版本:

最初我使用AlamofireImage: productImageView.af.setImage(withURL: url),但没有用。然后我开始使用 Alamofire。在请求中我传递 MIME-type image/jpeg 就像 Content-Type:

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

如果你能在error-message中看到我有:

responseContentType: "application/json"

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

首先,您的请求 headers 与响应是否有效无关,因此添加 image/jpeg 也无济于事。其次,您的回复是 return 和 application/json 内容类型,因此将 image/jpeg 添加到可接受的内容类型将无济于事(并且 image/jpeg 已经可以接受)。 (顺便说一句,你需要 import AlamofireImage 才能让 addAcceptableImageContentTypes 工作。)

最后,您应该确保获得预期的响应,因为 application/json 内容类型意味着您获得的是 JSON body,而不是图像来回你的要求。当我请求你发布的 URL 时,我得到了这个 JSON 响应:

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

所以您很可能需要仔细检查您应该如何提出请求。

Link 应该是

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

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