在我的网络应用中,我使用此代码将字符串下载到本地光盘上的文件:
void downloadFile(String filename, String text){
AnchorElement tl = document.createElement('a');
tl..attributes['href'] = 'data:text/plain;charset=utf-8,' + Uri.encodeComponent(text)
..attributes['download'] = filename
..click();
}
但这会删除所有换行符(" \ n")。我需要做些什么来保护它们?
答案 0 :(得分:1)
从Dart 1.14开始,有一个UriData
类,可以更轻松地使用data:
URI。您可以像这样使用它:
void downloadFile(String filename, String text){
AnchorElement tl = document.createElement('a');
var href = UriData.fromString(text, encoding: UTF8);
tl..attributes['href'] = href.toString()
..attributes['download'] = filename
..click();
应确保使用正确的编码来保留换行符。
答案 1 :(得分:1)
如果文件太大,data:
Uri会导致浏览器发出"下载错误信号"。
改为创建一个临时Blob,并且仍应保留换行符:
AnchorElement tl = document.createElement('a');
var href = Url.createObjectUrl(new Blob([text]));
tl..attributes['href'] = href
..attributes['download'] = filename
..click();
答案 2 :(得分:0)
我无法获得"数据:text / html"工作(我不是专家),所以我使用" data:text / csv",然后下载一个csv文件。如果用户需要文本文件,他们可以在电子表格中打开并导出。它实际上符合我的目的。
void downloadFile(String filename, String text) {
text=text.replaceAll('\n','%0A');
text=text.replaceAll('\t','%2C');
text="data:text/csv,"+text;
AnchorElement tl = document.createElement('a');
tl
..attributes['href'] = text
..attributes['download'] = filename
..click();
}
我会称之为:
String s="one two \n three four \n five\tsix\t 7";
downloadFile('test.csv',s);
如果你:
downloadFile('test.txt',s);
新行和标签被删除。