如何使用重定向URL加载网络图像?

时间:2019-06-19 06:45:15

标签: flutter

我尝试从api加载图片, 当我从flutter或CachedNetworkImage插件中使用NetworkImage时,应用frezee并停止处理此错误

  

I /颤振(314):IM图像资源服务引起的异常提示   ╞═════════════════════════════════════════════════ ═══我/颤振(   314):抛出以下_Exception来解析图像编解码器:   I / flutter(314):异常:HTTP请求失败,statusCode:308,   I / flutter(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永久重定向的抖动支持?

2 个答案:

答案 0 :(得分:0)

您的api是否在浏览器上正常工作?

尝试使用占位符

FadeInImage.assetNetwork(
                                  placeholder: "assets/images/logo.png",
                                  image:
                                      "$_url/nativeapi/v1.0/s3object/GetCompanyLogo?siteId=${widget.siteId}")

答案 1 :(得分:0)

直到20年9月仍然没有一个好的解决方案,您可以使用Flutter配置自己的Http模块并通过Image.network()NetworkImage()传递它。

有一些库,但是它们更让您选择followRedirects: boolean或添加headers: Map<String, String>,因此您必须选择是否要进行身份验证或重定向功能。

就我而言,我是提供图像重定向的API的所有者。我意识到我正在使用PERMANENT_REDIRECT(308),并且可以与Postman或浏览器正常工作,但是我所做的是将状态代码更改为MOVED_PERMANENTLY(301)。

现在就可以使用!