如何使用重定向 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 加载网络图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 URL 更改而不是页面重定向进行 ajax 加载?

如何在 JSF 1.x 中对页面加载进行重定向

如何使用转发 URL 执行 302 重定向

如何在java中重定向到外部URL

带有重定向 URL 的 UIImageView 不起作用

如何阻止重定向的 URL 被屏蔽?