Flutter中如何从网页及Google Drive下载.txt文本文件?
Flutter 下载网络txt文本及Google Drive文件的实现方案
通用公网txt文件下载实现
txt文件本身体积通常较小,不需要依赖复杂的分片下载逻辑,通过基础网络请求+本地文件写入能力即可完成全流程:
- 核心依赖引入:在项目
pubspec.yaml中配置dio用于网络请求、path_provider用于获取应用合法存储路径 - 实现逻辑说明:
- 直接通过GET请求拉取目标txt文件的纯文本内容,无需解析二进制流
- 获取应用专属文档目录的存储路径,无需额外申请系统存储权限
- 将拉取到的文本内容写入本地对应路径的txt文件,完成下载流程
- 核心示例代码:
import 'dart:io'; import 'package:dio/dio.dart'; import 'package:path_provider/path_provider.dart'; Future<String> saveTxtFromPublicUrl(String sourceUrl, String targetFileName) async { final dio = Dio(); // 按纯文本格式拉取响应内容 final resp = await dio.get<String>( sourceUrl, options: Options(responseType: ResponseType.plain), ); // 获取应用专属文档存储目录 final storageDir = await getApplicationDocumentsDirectory(); final fullSavePath = '${storageDir.path}/$targetFileName.txt'; // 写入本地文件 final localFile = File(fullSavePath); await localFile.writeAsString(resp.data ?? ''); return fullSavePath; }
Google Drive 场景的适配逻辑
要实现从Google Drive拉取txt文件,需要针对Drive的接口规则做特殊处理,可覆盖公开分享文件、私有权限文件两类场景:
- 公开权限文件(任意链接持有者可访问):
提取Google Drive分享链接中的文件ID,将网页版分享链接转换为可直接拉取内容的直链格式,直接请求该直链即可拿到原始txt文本,无需额外鉴权。注意:不要直接使用带/view、usp=sharing等交互后缀的网页分享链接作为请求地址,否则会拿到HTML格式的网页源码而非原始文本内容,请求时需要强制设置响应类型为纯文本格式。 - 私有权限文件(需登录Google账号访问):
先通过google_sign_in完成Google账号的身份鉴权,拿到有效访问令牌后,将令牌配置为网络请求的鉴权请求头字段,再请求对应Drive文件的内容接口,即可拿到受权限保护的txt文件内容。
落地注意事项
- txt文件无大体积分片下载需求,直接拉取文本写入本地的方案实现成本最低,平台兼容性最好,不需要引入冗余的大文件下载插件
- 优先将下载的文件存储到应用专属目录,可跳过Android、iOS平台的系统存储权限申请流程,大幅减少适配工作量
- 如果需要将下载的txt暴露给系统文件管理器查看,需要单独在对应平台配置公共存储目录的访问权限
内容的提问来源于stack exchange,提问作者Khatami Onik
相关产品推荐
相关产品推荐

