You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)优化内存占用

问题截图

文件损坏提示1
文件损坏提示2
文件损坏提示3

内容的提问来源于stack exchange,提问作者noblesseoblige

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:07:36