Flutter Web通过URL下载文件损坏问题求助
Flutter Web 文件下载损坏问题修复
你的代码导致文件损坏的核心原因是:把文件URL字符串直接封装成Blob对象,最终下载的内容是URL文本,而非实际文件的二进制数据。
修复后的代码
首先确保引入依赖包:
import 'dart:html' as html; import 'dart:typed_data'; import 'package:http/http.dart' as http;
修改下载函数为异步方法(因为需要发起网络请求):
Future<String> downloadFile(String filename) async { final fileUrl = 'https://www.xxxxxx.it/yyyy/zzzz/$filename'; // 1. 获取文件二进制数据 final response = await http.get(Uri.parse(fileUrl)); if (response.statusCode != 200) { return '下载失败:HTTP状态码 ${response.statusCode}'; } // 2. 基于二进制数据创建Blob final blob = html.Blob([response.bodyBytes]); final objectUrl = html.Url.createObjectUrlFromBlob(blob); // 3. 创建并触发下载链接 final anchor = html.AnchorElement(href: objectUrl) ..setAttribute('download', filename) ..style.display = 'none'; html.document.body?.append(anchor); anchor.click(); // 4. 清理资源,避免内存泄漏 html.Url.revokeObjectUrl(objectUrl); anchor.remove(); return '文件 $filename 正在下载!'; }
关键说明
- 必须通过网络请求获取文件的
bodyBytes(二进制数据),再封装成Blob,才能保证下载的是真实文件内容 - 下载完成后要调用
revokeObjectUrl释放URL对象占用的内存 - 如果文件体积较大,建议使用流式请求(
http.Client配合Stream)优化内存占用
问题截图



内容的提问来源于stack exchange,提问作者noblesseoblige
相关产品推荐
相关产品推荐

