【问题标题】:How to load network image with redirect url?如何使用重定向 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 永久重定向?

【问题讨论】:

  • 你解决了吗?我有同样的问题

标签: flutter


【解决方案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)。

现在可以使用了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 2012-01-07
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多