使用消息“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最初我使用 AlamofireImage:productImageView.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”从存储中获取图像时出错的主要内容,如果未能解决你的问题,请参考以下文章