如何使用Flutter将Base64字符串保存到文件并查看

15

我需要使用Flutter下载并查看文件(如果可能的话,包括图像、PDF等)。我的问题是,我想要下载的文件是Base64字符串。我该如何使用Flutter实现这个功能?


3
问题在哪一部分?导入 dart:convert 并使用 base64.decode(fileContent),然后使用 Image.memory 显示。关于 HTTP 请求和 base64 已经有一些问题了。 - Günter Zöchbauer
@GünterZöchbauer,不仅仅是图片,还可以是PDF、TXT、XLS和其他文件类型。我在Flutter方面还是新手,也许你可以给我一个例子。 - esthrim
@esthrim,你到目前为止解决了这个问题吗? - Jose Jet
2个回答

27

以下是解码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;
 }

这里,你有一个base64字符串并创建文件。但是你知道如何做相反的操作吗?我有一个图像文件路径,并需要在Flutter Web应用程序中将其转换为base64以进行提交。 - Boni Machado
你解决了这个问题吗? - biniyam112
@BoniMachado 看看这个 https://dev59.com/blUL5IYBdhLWcg3wopWy#50038239 - Ahmad Khan

2

谷歌浏览器不允许使用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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接