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

Flutter中如何去除字符串双引号以生成正确文件路径?

解决文件名双引号去除问题

你的问题出在仅移除了filename=前缀,但未处理字符串前后的双引号,以下是两种可行的解决方法:

方法一:直接替换双引号

在现有代码基础上,添加去除双引号的操作即可:

var a = contentDisposition!.split(";");
debugPrint("eev ${a[1]}"); // filename="ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf"

var c = a[1].replaceAll("filename=", "");
var d = c.replaceAll('"', '').trim(); // 先移除所有双引号,再清理首尾空格
var bytes = await consolidateHttpClientResponseBytes(response);
String dir = (await getApplicationDocumentsDirectory()).path;

File file = File("$dir/$d");
String path = file.path;
debugPrint(path); // /data/user/0/com.xxx/xxx/ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf

方法二:正则提取文件名(更健壮)

如果担心文件名包含特殊字符,用正则匹配双引号内的内容更稳妥:

var a = contentDisposition!.split(";");
debugPrint("eev ${a[1]}"); // filename="ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf"

// 匹配双引号包裹的内容
RegExp filenameRegex = RegExp(r'"([^"]*)"');
Match? matchResult = filenameRegex.firstMatch(a[1]);
var d = matchResult?.group(1) ?? ''; // 提取匹配到的文件名,默认空串防止匹配失败
var bytes = await consolidateHttpClientResponseBytes(response);
String dir = (await getApplicationDocumentsDirectory()).path;

File file = File("$dir/$d");
String path = file.path;
debugPrint(path); // /data/user/0/com.xxx/xxx/ABC Home_2-2-2_12 Jan 2024-12 Jan 2024.pdf

两种方法都能有效去除双引号,方法二更适合处理复杂文件名场景,避免意外情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:56:01