如何使用重定向 url 加载网络图像?
Posted
技术标签:
【中文标题】如何使用重定向 url 加载网络图像?【英文标题】:How to load network image with redirect url? 【发布时间】:2019-11-01 20:00:40 【问题描述】:我试图从 api 加载图像, 当我使用 Flutter 或 CachedNetworkImage 插件中的 NetworkImage 时,应用程序冻结并停止处理此错误
I/flutter (314): ══╡ 图像资源服务捕获的异常 ╞═════════════════════════════════════════════════ ═══ I/颤振 ( 314):在解析图像编解码器时引发了以下 _Exception: I/flutter (314):异常:HTTP 请求失败,状态码:308, 我/颤振(314):http://example.com/image/sample.jpg
代码示例:
CachedNetworkImage(
height: MediaQuery.of(context).size.width * 0.25,
width: MediaQuery.of(context).size.width * 0.25,
fit: BoxFit.cover,
placeholder: (context, url) => Image.asset(
"$assetsImages/loader_image.gif",
height:
MediaQuery.of(context).size.width * 0.25,
width: MediaQuery.of(context).size.width * 0.25,
),
errorWidget: (context, url, error) => Image.asset(
"$assetsImages/image_unavailable.jpg",
height:
MediaQuery.of(context).size.width * 0.25,
width: MediaQuery.of(context).size.width * 0.25,
),
imageUrl: restoImageUrl + value['filename'],
)
imageUrl 有问题:restoImageUrl + value['filename'], 当我单击错误的链接图像时,它在浏览器上正常打开, 如何解决这个问题? 或者如何让颤振支持 url 308 永久重定向?
【问题讨论】:
你解决了吗?我有同样的问题 【参考方案1】:你的 api 是否在浏览器上运行?
试试占位符
FadeInImage.assetNetwork(
placeholder: "assets/images/logo.png",
image:
"$_url/nativeapi/v1.0/s3object/GetCompanyLogo?siteId=$widget.siteId")
【讨论】:
是的,我的 api 在浏览器上工作,并且在 SSl 重定向后加载图像,【参考方案2】:20 年 9 月仍然没有一个好的解决方案,您可以使用 Flutter 配置自己的 Http 模块并通过 Image.network()
或 NetworkImage()
传递它。
有一些库,但它们宁愿让您选择followRedirects: boolean
或添加headers: Map<String, String>
,因此您必须选择是否需要身份验证或重定向功能。
就我而言,我是提供图像重定向的 API 的所有者。我意识到我正在使用PERMANENT_REDIRECT
(308),它在 Postman 或浏览器上运行良好,但我所做的是将状态代码更改为 MOVED_PERMANENTLY (301)。
现在可以使用了!
【讨论】:
以上是关于如何使用重定向 url 加载网络图像?的主要内容,如果未能解决你的问题,请参考以下文章