我需要使用Flutter下载并查看文件(如果可能的话,包括图像、PDF等)。我的问题是,我想要下载的文件是Base64字符串。我该如何使用Flutter实现这个功能?
以下是解码base64字符串并将其保存为本地设备文件的代码片段。请注意,在查看文件方面,图像和PDF需要不同的库。
Future<String> _createFileFromString() async {
final encodedStr = "put base64 encoded string here";
Uint8List bytes = base64.decode(encodedStr);
String dir = (await getApplicationDocumentsDirectory()).path;
File file = File(
"$dir/" + DateTime.now().millisecondsSinceEpoch.toString() + ".pdf");
await file.writeAsBytes(bytes);
return file.path;
}
谷歌浏览器不允许使用javascript打开base64编码的Url,例如"data:application/pdf;base64,JVBERi0xLjQKJeLj...",因此您无法使用url_launcher打开该Url,但是您可以下载文件。
这是我的代码:
import 'dart:html' as html;
...
Future<void> downloadFile() {
final urlString = "data:application/pdf;base64,JVBERi0xLjQKJeLj...";
html.AnchorElement anchorElement = html.AnchorElement(href:urlString);
anchorElement.download = urlString;
anchorElement.click();
}
dart:convert
并使用base64.decode(fileContent)
,然后使用Image.memory
显示。关于 HTTP 请求和 base64 已经有一些问题了。 - Günter Zöchbauer