返回
Flutter CachedNetworkImage 下载网易云音乐链接的解决方案
Android
2023-10-09 03:23:38
如何使用 CachedNetworkImage 下载网易云音乐图片
问题: 使用 CachedNetworkImage 下载网易云音乐图片时遇到 403 错误。
原因: 网易云音乐使用了防盗链机制,会阻止其他网站的请求。
解决方案: 使用网易云音乐的 redirectUrl。redirectUrl 可以将请求重定向到网易云音乐的服务器,从而绕过防盗链机制。
步骤:
- 获取 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),
);
- 使用 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),
);
}
}
常见问题解答:
- 为什么使用 CachedNetworkImage 比其他方法更好?
CachedNetworkImage 更加简单方便,而且还支持缓存,可以提高图片的加载速度。
- 如何获取 redirectUrl?
使用 CachedNetworkImage 的 imageBuilder 属性获取 redirectUrl。
- 为什么需要使用 redirectUrl?
网易云音乐的防盗链机制会阻止其他网站的请求,使用 redirectUrl 可以绕过此机制。
- 使用 redirectUrl 是否违法?
否,使用 redirectUrl 不违法。
- 如果仍然无法下载图片怎么办?
检查你的网络连接或尝试使用其他方法下载图片。