返回

Flutter CachedNetworkImage 下载网易云音乐链接的解决方案

Android

如何使用 CachedNetworkImage 下载网易云音乐图片

问题: 使用 CachedNetworkImage 下载网易云音乐图片时遇到 403 错误。

原因: 网易云音乐使用了防盗链机制,会阻止其他网站的请求。

解决方案: 使用网易云音乐的 redirectUrl。redirectUrl 可以将请求重定向到网易云音乐的服务器,从而绕过防盗链机制。

步骤:

  1. 获取 redirectUrl

使用 CachedNetworkImage 的 imageBuilder 属性获取 redirectUrl:

CachedNetworkImage(
  imageUrl: 'https://example.com/image.jpg',
  imageBuilder: (context, imageProvider) => Image.network(
    imageProvider.resolve(ImageConfiguration()).redirectUrl,
  ),
  placeholder: (context, url) => CircularProgressIndicator(),
  errorWidget: (context, url, error) => Icon(Icons.error),
);
  1. 使用 redirectUrl 下载图片

在 imageBuilder 属性中使用 Image.network() 下载图片:

CachedNetworkImage(
  imageUrl: 'https://example.com/image.jpg',
  imageBuilder: (context, imageProvider) => Image.network(
    imageProvider.resolve(ImageConfiguration()).redirectUrl,
  ),
  placeholder: (context, url) => CircularProgressIndicator(),
  errorWidget: (context, url, error) => Icon(Icons.error),
);

代码示例:

import 'package:cached_network_image/cached_network_image.dart';

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CachedNetworkImage(
      imageUrl: 'https://example.com/image.jpg',
      imageBuilder: (context, imageProvider) => Image.network(
        imageProvider.resolve(ImageConfiguration()).redirectUrl,
      ),
      placeholder: (context, url) => CircularProgressIndicator(),
      errorWidget: (context, url, error) => Icon(Icons.error),
    );
  }
}

常见问题解答:

  1. 为什么使用 CachedNetworkImage 比其他方法更好?

CachedNetworkImage 更加简单方便,而且还支持缓存,可以提高图片的加载速度。

  1. 如何获取 redirectUrl?

使用 CachedNetworkImage 的 imageBuilder 属性获取 redirectUrl。

  1. 为什么需要使用 redirectUrl?

网易云音乐的防盗链机制会阻止其他网站的请求,使用 redirectUrl 可以绕过此机制。

  1. 使用 redirectUrl 是否违法?

否,使用 redirectUrl 不违法。

  1. 如果仍然无法下载图片怎么办?

检查你的网络连接或尝试使用其他方法下载图片。